Модулі обробки XML¶
Вихідний код: Lib/xml/
Інтерфейси Python для обробки XML згруповані в пакеті xml
.
Примітка
If you need to parse untrusted or unauthenticated data, see XML security.
Важливо зазначити, що модулі в пакеті xml
вимагають наявності принаймні одного XML-аналізатора, сумісного з SAX. Синтаксичний аналізатор Expat включено в Python, тому модуль xml.parsers.expat
буде завжди доступним.
Документація для пакетів xml.dom
і xml.sax
містить визначення прив’язок Python для інтерфейсів DOM і SAX.
Субмодулі обробки XML:
xml.etree.ElementTree
: API ElementTree, простий і легкий процесор XML
xml.dom
: визначення DOM APIxml.dom.minidom
: мінімальна реалізація DOMxml.dom.pulldom
: підтримка створення часткових дерев DOM
xml.sax
: Базові класи SAX2 і зручні функціїxml.parsers.expat
: прив’язка аналізатора Expat
XML security¶
An attacker can abuse XML features to carry out denial of service attacks, access local files, generate network connections to other machines, or circumvent firewalls.
Expat versions lower that 2.6.0 may be vulnerable to «billion laughs»,
«quadratic blowup» and «large tokens». Python may be vulnerable if it uses such
older versions of Expat as a system-provided library.
Check pyexpat.EXPAT_VERSION
.
xmlrpc
is vulnerable to the «decompression bomb» attack.
- мільярд сміхів / експоненціальне розширення сутності
Атака Billion Laughs — також відома як експоненціальне розширення об’єктів — використовує кілька рівнів вкладених об’єктів. Кожна сутність посилається на іншу сутність кілька разів, і остаточне визначення сутності містить невеликий рядок. Експоненціальне розширення призводить до кількох гігабайт тексту та споживає багато пам’яті та часу ЦП.
- квадратичне розширення сутності
A quadratic blowup attack is similar to a Billion Laughs attack; it abuses entity expansion, too. Instead of nested entities it repeats one large entity with a couple of thousand chars over and over again. The attack isn’t as efficient as the exponential case but it avoids triggering parser countermeasures that forbid deeply nested entities.
- декомпресійна бомба
Бомби декомпресії (також відомі як ZIP-бомба) застосовуються до всіх бібліотек XML, які можуть аналізувати стислі потоки XML, такі як потоки HTTP, стиснуті gzip, або файли, стиснуті за допомогою LZMA. Для зловмисника це може зменшити обсяг переданих даних на три або більше величин.
- large tokens
Expat needs to re-parse unfinished tokens; without the protection introduced in Expat 2.6.0, this can lead to quadratic runtime that can be used to cause denial of service in the application parsing XML. The issue is known as CVE 2023-52425.