XML-Verarbeitungsmodule¶
Quellcode: Lib/xml/
Die Python-Schnittstellen zur Verarbeitung von XML sind im Paket xml zusammengefasst.
Hinweis
Wenn Sie nicht vertrauenswürdige oder nicht authentifizierte Daten parsen müssen, siehe XML-Sicherheit.
Es ist wichtig zu beachten, dass Module im Paket xml mindestens einen SAX-konformen XML-Parser erfordern. Der Expat-Parser ist in Python enthalten, sodass das Modul xml.parsers.expat immer verfügbar sein wird.
Die Dokumentation für die Pakete xml.dom und xml.sax ist die Definition der Python-Bindungen für die DOM- und SAX-Schnittstellen.
Die Submodule zur XML-Verarbeitung sind
xml.etree.ElementTree: die ElementTree API, ein einfacher und leichter XML-Prozessor
xml.dom: die Definition der DOM APIxml.dom.minidom: eine minimale DOM-Implementierungxml.dom.pulldom: Unterstützung zum Aufbau partieller DOM-Bäume
xml.sax: SAX2-Basisklassen und Hilfsfunktionenxml.parsers.expat: die Expat-Parser-Bindung
XML-Sicherheit¶
Ein Angreifer kann XML-Funktionen missbrauchen, um Denial-of-Service-Angriffe auszuführen, auf lokale Dateien zuzugreifen, Netzwerkverbindungen zu anderen Maschinen herzustellen oder Firewalls zu umgehen.
Expat-Versionen unter 2.6.0 können anfällig für „Billion Laughs“, „Quadratic Blowup“ und „Large Tokens“ sein. Python kann anfällig sein, wenn es solche älteren Expat-Versionen als systemseitig bereitgestellte Bibliothek verwendet. Überprüfen Sie pyexpat.EXPAT_VERSION.
xmlrpc ist anfällig für den Angriff „Decompression Bomb“.
- Billion Laughs / exponentielle Entity-Erweiterung
Der Angriff „Billion Laughs“ – auch bekannt als exponentielle Entity-Erweiterung – verwendet mehrere Ebenen verschachtelter Entitäten. Jede Entität verweist mehrmals auf eine andere Entität, und die endgültige Entitätsdefinition enthält einen kleinen String. Die exponentielle Erweiterung führt zu mehreren Gigabyte Text und verbraucht viel Speicher und CPU-Zeit.
- Quadratische Blowup-Entity-Erweiterung
Ein quadratischer Blowup-Angriff ist dem Angriff „Billion Laughs“ ähnlich; er nutzt ebenfalls die Entity-Erweiterung aus. Anstatt verschachtelter Entitäten wiederholt er eine große Entität mit einigen Tausend Zeichen immer wieder. Der Angriff ist nicht so effizient wie der exponentielle Fall, vermeidet aber Parser-Gegenmaßnahmen, die tief verschachtelte Entitäten verbieten.
- Decompression Bomb
Decompression Bombs (auch bekannt als ZIP-Bombe) gelten für alle XML-Bibliotheken, die komprimierte XML-Streams wie gzipte HTTP-Streams oder LZMA-komprimierte Dateien parsen können. Für einen Angreifer kann dies die übertragene Datenmenge um das Drei- bis Hundertfache oder mehr reduzieren.
- Große Tokens
Expat muss unvollständige Tokens erneut parsen; ohne den in Expat 2.6.0 eingeführten Schutz kann dies zu einer quadratischen Laufzeit führen, die dazu verwendet werden kann, Denial-of-Service-Angriffe auf die XML-parsenden Anwendungen zu verursachen. Das Problem ist bekannt als CVE 2023-52425.