Introduction détaillée à l'exemple de code d'injection XML dans la sécurité Web

黄舟
Libérer: 2017-03-08 16:48:41
original
2313 Les gens l'ont consulté

L'attaque par injection XML a le même principe que l'injection SQL. L'attaquant saisit du code malveillant pour exécuter des fonctions au-delà de ses propres autorisations. XML est un moyen de stocker des données. Si les données sont directement entrées ou sorties sans s'échapper lors de la modification ou de l'interrogation, cela entraînera des vulnérabilités d'injection XML. Les attaquants peuvent modifier le format des données XML et ajouter de nouveaux nœuds XML, affectant ainsi le processus de traitement des données.

Attaque

Ce qui suit est un exemple d'enregistrement des informations d'un utilisateur enregistré au format XML :

final String GUESTROLE = "guest_role";
...
//userdata是准备保存的xml数据,接收了name和email两个用户提交来的数据。
String userdata = "<USER role="+
                GUESTROLE+
                "><name>"+
                request.getParameter("name")+
                "</name><email>"+
                request.getParameter("email")+
                "</email></USER>";
//保存xml
userDao.save(userdata);
Copier après la connexion

Comme vous pouvez le voir, ce code n'effectue aucune opération de filtrage. Après l'enregistrement d'un utilisateur ordinaire, un tel enregistrement de données sera généré :

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest_role">
    <name>user1
    </name>
    <email>user1@a.com
    </email>
</USER>
Copier après la connexion

Lorsque l'attaquant saisit son adresse e-mail, il peut saisir le code suivant :

user1@a.com</email></USER><USER role="admin_role"><name>lf</name><email>user2@a.com
Copier après la connexion

Après l'enregistrement l'utilisateur final s'enregistre, les données seront. Cela devient :

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest_role">
    <name>user1
    </name>
    <email>user1@a.com</email>
</USER>
<USER role="admin_role">
    <name>lf</name>
    <email>user2@a.com
    </email>
</USER>
Copier après la connexion

Comme vous pouvez le voir, il y a un administrateur supplémentaire lf avec role="admin_role". atteindre le but de l’attaque.

Défense

Comme le dit le vieil adage, là où il y a attaque, il y a défense. Le principe de défense est en fait très simple, il s'agit d'échapper les chaînes clés :

& --> &
 < --> <
 > --> >
 " --> "
 &#39; --> &#39;
Copier après la connexion

Avant de sauvegarder et d'afficher le XML, échappez simplement la partie données séparément :

String userdata = "<USER role="+
                GUESTROLE+
                "><name>"+
                StringUtil.xmlencode(request.getParameter("name"))+
                "</name><email>"+
                StringUtil.xmlencode(rrequest.getParameter("email"))+
                "</email></USER>";
Copier après la connexion

C'est il.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!