xml.md
1> **Источник:** https://python-all.ru/3.14/library/xml.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Модули обработки XML89**Исходный код:** [Lib/xml/](https://python-all.ru/src/3.14/Lib/xml)1011---1213Интерфейсы Python для обработки XML объединены в пакете `xml`.1415> **Примечание**16>17> Если требуется разобрать непроверенные или неаутентифицированные данные, см. [Безопасность XML](https://python-all.ru/3.14/library/xml.html#xml-security).1819Важно отметить, что модули в пакете `xml` требуют наличия хотя бы одного SAX-совместимого анализатора XML. Анализатор Expat входит в состав Python, поэтому модуль [`xml.parsers.expat`](https://python-all.ru/3.14/library/pyexpat.html#module-xml.parsers.expat) всегда доступен.2021Документация пакетов [`xml.dom`](https://python-all.ru/3.14/library/xml.dom.html#module-xml.dom) и [`xml.sax`](https://python-all.ru/3.14/library/xml.sax.html#module-xml.sax) представляет собой описание привязок Python для интерфейсов DOM и SAX.2223Подмодули для работы с XML:2425- [`xml.etree.ElementTree`](https://python-all.ru/3.14/library/xml.etree.elementtree.html#module-xml.etree.ElementTree): API ElementTree, простой и легковесный процессор XML2627- [`xml.dom`](https://python-all.ru/3.14/library/xml.dom.html#module-xml.dom): определение API DOM28- [`xml.dom.minidom`](https://python-all.ru/3.14/library/xml.dom.minidom.html#module-xml.dom.minidom): минимальная реализация DOM29- [`xml.dom.pulldom`](https://python-all.ru/3.14/library/xml.dom.pulldom.html#module-xml.dom.pulldom): поддержка построения частичных DOM-деревьев3031- [`xml.sax`](https://python-all.ru/3.14/library/xml.sax.html#module-xml.sax): базовые классы SAX2 и вспомогательные функции32- [`xml.parsers.expat`](https://python-all.ru/3.14/library/pyexpat.html#module-xml.parsers.expat): привязка анализатора Expat3334## Безопасность XML3536Злоумышленник может злоупотребить возможностями XML для осуществления атак типа «отказ в обслуживании», доступа к локальным файлам, создания сетевых подключений к другим машинам или обхода межсетевых экранов при разборе XML, управляемого злоумышленником, как в Python, так и в других средах.3738Встроенные анализаторы XML в Python полагаются на библиотеку [libexpat](https://python-all.ru/3.14/library/xml.html), обычно называемую Expat, для разбора XML.3940По умолчанию сам Expat не обращается к локальным файлам и не создает сетевые подключения.4142Версии Expat ниже 2.7.2 могут быть уязвимы к атакам «миллиард смешков», «квадратичный взрыв» и «большие токены», а также к непропорциональному использованию динамической памяти. Python включает в себя копию Expat, и то, использует ли Python встроенную или системную версию Expat, зависит от того, как интерпретатор Python [`has been configured`](https://python-all.ru/3.14/using/configure.html#cmdoption-with-system-expat) в вашем окружении. Python может быть уязвим, если он использует такие старые версии Expat. Проверьте `pyexpat.EXPAT_VERSION`.4344[`xmlrpc`](https://python-all.ru/3.14/library/xmlrpc.html#module-xmlrpc) **уязвим** к атаке «бомба декомпрессии».4546**миллиард смешков / экспоненциальное расширение сущностей**4748Атака [Billion Laughs](https://python-all.ru/3.14/library/xml.html) (миллиард смешков) – также известная как экспоненциальное расширение сущностей – использует несколько уровней вложенных сущностей. Каждая сущность ссылается на другую сущность несколько раз, а определение конечной сущности содержит небольшую строку. Экспоненциальное расширение приводит к получению нескольких гигабайт текста и потребляет много памяти и процессорного времени.4950**квадратичное расширение сущностей**5152Атака квадратичного взрыва аналогична атаке [Billion Laughs](https://python-all.ru/3.14/library/xml.html); она также злоупотребляет расширением сущностей. Вместо вложенных сущностей она многократно повторяет одну большую сущность длиной в несколько тысяч символов. Такая атака не так эффективна, как экспоненциальная, но она позволяет обходить меры противодействия анализатора, запрещающие глубоко вложенные сущности.5354**бомба декомпрессии**5556Бомбы декомпрессии (также известные как [ZIP bomb](https://python-all.ru/3.14/library/xml.html)) применимы ко всем библиотекам XML, которые могут анализировать сжатые потоки XML, такие как gzipped HTTP-потоки или файлы, сжатые LZMA. Для злоумышленника это может уменьшить объем передаваемых данных на три порядка и более.5758**большие токены**5960Expat вынужден повторно разбирать незавершенные токены; без защиты, введенной в Expat 2.6.0, это может привести к квадратичному времени выполнения, которое может быть использовано для отказа в обслуживании в приложении, разбирающем XML. Проблема известна как [**CVE 2023-52425**](https://python-all.ru/3.14/library/xml.html).61