Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in den Beispielcode der XML-Injection in der Web-Sicherheit

Detaillierte Einführung in den Beispielcode der XML-Injection in der Web-Sicherheit

黄舟
黄舟Original
2017-03-08 16:48:412338Durchsuche

Der XML-Injection-Angriff funktioniert nach dem gleichen Prinzip wie der SQL-Injection. Der Angreifer gibt Schadcode ein, um Funktionen auszuführen, die über seine eigenen Berechtigungen hinausgehen. XML ist eine Möglichkeit, Daten direkt ein- oder auszugeben, ohne sie beim Ändern oder Abfragen zu entkommen, was zu XML-Injection-Schwachstellen führt. Angreifer können das XML-Datenformat ändern und neue XML-Knoten hinzufügen, was sich auf den Datenverarbeitungsprozess auswirkt.

Angriff

Das Folgende ist ein Beispiel für das Speichern registrierter Benutzerinformationen im XML-Format:

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

Wie Sie sehen können, führt dieser Code keine Filtervorgänge durch. Nachdem sich ein gewöhnlicher Benutzer registriert hat, wird ein solcher Datensatz generiert:

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest_role">
    <name>user1
    </name>
    <email>user1@a.com
    </email>
</USER>

Wenn der Angreifer seine E-Mail-Adresse eingibt, kann er den folgenden Code eingeben:

user1@a.com</email></USER><USER role="admin_role"><name>lf</name><email>user2@a.com

Nach dem Wenn sich der Endbenutzer registriert, werden die Daten wie folgt angezeigt:

<?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>

Wie Sie sehen können, gibt es einen zusätzlichen Administrator LF mit der Rolle="admin_role". den Zweck des Angriffs erreichen.

Verteidigung

Wie das alte Sprichwort sagt: Wo Angriff ist, ist auch Verteidigung. Das Verteidigungsprinzip ist eigentlich sehr einfach, nämlich die Schlüsselzeichenfolgen zu maskieren:

& --> &
 < --> <
 > --> >
 " --> "
 &#39; --> &#39;

Bevor Sie das XML speichern und anzeigen, maskieren Sie nur den Datenteil:

String userdata = "<USER role="+
                GUESTROLE+
                "><name>"+
                StringUtil.xmlencode(request.getParameter("name"))+
                "</name><email>"+
                StringUtil.xmlencode(rrequest.getParameter("email"))+
                "</email></USER>";

Das ist es.


Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Beispielcode der XML-Injection in der Web-Sicherheit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn