# Модулі обробки XML

Вихідний код: Lib/xml/

Інтерфейси Python для обробки XML згруповані в пакеті `xml`.

Примітка

If you need to parse untrusted or unauthenticated data, see XML security.

It is important to note that modules in the `xml` package require that there be at least one SAX-compliant XML parser available. The Expat parser is included with Python, so the `xml.parsers.expat` module will always be available.

Документація для пакетів `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

This module also defines utility functions.

xml.is_valid_name(name)

  Return `True` if the string is a valid element or attribute name, `False` otherwise.

  Almost all characters are permitted in names, except control characters and those which either are or reasonably could be used as delimiters. Characters like «:», «-», «.», «_», and «·» are permitted, but «<», «/», «!», «?», and «=» are forbidden. The name cannot start with a digit or a character like «-», «.», and «·».

  Added in version 3.15.

xml.is_valid_text(data)

  Return `True` if the string is a sequence of legal XML 1.0 characters, `False` otherwise.

  Almost all characters are permitted in XML 1.0 documents, except C0 control characters (excluding TAB, CR and LF), surrogate characters and special Unicode characters U+FFFE and U+FFFF.

  Added in version 3.15.

## 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.