Maison >développement back-end >Tutoriel XML/RSS >Introduction détaillée à l'exemple de code d'injection XML dans la sécurité Web

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

黄舟
黄舟original
2017-03-08 16:48:412377parcourir

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);

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>

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

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>

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;

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>";

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!

Déclaration:
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