# Модулі обробки 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 API

- `xml.dom.minidom`: мінімальна реалізація DOM

- `xml.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 when attacker-controlled XML is being parsed, in Python or elsewhere.

The built-in XML parsers of Python rely on the library libexpat, commonly called Expat, for parsing XML.

By default, Expat itself does not access local files or create network connections.

Expat versions lower than 2.7.2 may be vulnerable to the «billion laughs», «quadratic blowup» and «large tokens» vulnerabilities, or to disproportional use of dynamic memory. Python bundles a copy of Expat, and whether Python uses the bundled or a system-wide Expat, depends on how the Python interpreter `has been configured` in your environment. Python may be vulnerable if it uses such older versions of Expat. 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.