Heim > Artikel > Backend-Entwicklung > Detaillierte Einführung in den Beispielcode der XML-Injection in der Web-Sicherheit
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:
& --> & < --> < > --> > " --> " ' --> '
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!