Документация Python неофициальный перевод
Содержание страницы

Модули обработки XMLXML Processing Modules

Исходный код: Lib/xml/


Интерфейсы Python для обработки XML объединены в пакете xml.

Примечание

Если требуется разобрать непроверенные или неаутентифицированные данные, см. Безопасность XML.

Важно отметить, что модули в пакете xml требуют наличия хотя бы одного SAX-совместимого анализатора XML. Анализатор Expat входит в состав Python, поэтому модуль xml.parsers.expat всегда доступен.

Документация пакетов xml.dom и xml.sax представляет собой описание привязок Python для интерфейсов DOM и SAX.

Подмодули для работы с XML:

  • xml.etree.ElementTree: API ElementTree, простой и легковесный процессор XML

  • xml.dom: определение API DOM

  • xml.dom.minidom: минимальная реализация DOM

  • xml.dom.pulldom: поддержка построения частичных DOM-деревьев

  • xml.sax: базовые классы SAX2 и вспомогательные функции

  • xml.parsers.expat: привязка анализатора Expat

Безопасность XMLXML security

Злоумышленник может злоупотребить возможностями XML для осуществления атак типа «отказ в обслуживании», доступа к локальным файлам, создания сетевых подключений к другим машинам или обхода межсетевых экранов при разборе XML, управляемого злоумышленником, как в Python, так и в других средах.

Встроенные анализаторы XML в Python полагаются на библиотеку libexpat, обычно называемую Expat, для разбора XML.

По умолчанию сам Expat не обращается к локальным файлам и не создает сетевые подключения.

Версии Expat ниже 2.7.2 могут быть уязвимы к атакам «миллиард смешков», «квадратичный взрыв» и «большие токены», а также к непропорциональному использованию динамической памяти. Python включает в себя копию Expat, и то, использует ли Python встроенную или системную версию Expat, зависит от того, как интерпретатор Python has been configured в вашем окружении. Python может быть уязвим, если он использует такие старые версии Expat. Проверьте pyexpat.EXPAT_VERSION.

xmlrpc уязвим к атаке «бомба декомпрессии».

миллиард смешков / экспоненциальное расширение сущностей

Атака Billion Laughs (миллиард смешков) – также известная как экспоненциальное расширение сущностей – использует несколько уровней вложенных сущностей. Каждая сущность ссылается на другую сущность несколько раз, а определение конечной сущности содержит небольшую строку. Экспоненциальное расширение приводит к получению нескольких гигабайт текста и потребляет много памяти и процессорного времени.

квадратичное расширение сущностей

Атака квадратичного взрыва аналогична атаке Billion Laughs; она также злоупотребляет расширением сущностей. Вместо вложенных сущностей она многократно повторяет одну большую сущность длиной в несколько тысяч символов. Такая атака не так эффективна, как экспоненциальная, но она позволяет обходить меры противодействия анализатора, запрещающие глубоко вложенные сущности.

бомба декомпрессии

Бомбы декомпрессии (также известные как ZIP bomb) применимы ко всем библиотекам XML, которые могут анализировать сжатые потоки XML, такие как gzipped HTTP-потоки или файлы, сжатые LZMA. Для злоумышленника это может уменьшить объем передаваемых данных на три порядка и более.

большие токены

Expat вынужден повторно разбирать незавершенные токены; без защиты, введенной в Expat 2.6.0, это может привести к квадратичному времени выполнения, которое может быть использовано для отказа в обслуживании в приложении, разбирающем XML. Проблема известна как CVE 2023-52425.