Spec-Zone.ru › Python 3.13

Модули обработки XML

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

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

Предупреждение

Модули XML не защищены от ошибочных или злонамеренно сконструированных данных. Если вам необходимо проанализировать недоверенные или неавторизованные данные, обратитесь к разделам Уязвимости XML и Пакет defusedxml.

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

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

Подмодули обработки XML:

  • xml.etree.ElementTree: интерфейс ElementTree, простой и легкий процессор XML
  • xml.dom: определение API DOM
  • xml.dom.minidom: минимальная реализация DOM
  • xml.dom.pulldom: поддержка построения частичных деревьев DOM
  • xml.sax: базовые классы SAX2 и вспомогательные функции
  • xml.parsers.expat: связывание парсера Expat

Уязвимости XML

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

В следующей таблице представлен обзор известных атак и подверженность различных модулей этим атакам.

тип

sax

etree

minidom

pulldom

xmlrpc

миллиард смеха

Уязвим (1)

Уязвим (1)

Уязвим (1)

Уязвим (1)

Уязвим (1)

квадратичный взрыв

Уязвим (1)

Уязвим (1)

Уязвим (1)

Уязвим (1)

Уязвим (1)

расширение внешнего сущности

Безопасно (5)

Безопасно (2)

Безопасно (3)

Безопасно (5)

Безопасно (4)

получение DTD

Безопасно (5)

Безопасно

Безопасно

Безопасно (5)

Безопасно

бомба сжатия

Безопасно

Безопасно

Безопасно

Безопасно

Уязвим

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

Уязвим (6)

Уязвим (6)

Уязвим (6)

Уязвим (6)

Уязвим (6)

  1. Expat 2.4.1 и более поздние версии не уязвимы для уязвимостей «миллиард смеха» и «квадратичный взрыв». Элементы по-прежнему указаны как уязвимые из-за потенциальной зависимости от системных библиотек. Проверьте pyexpat.EXPAT_VERSION.
  2. xml.etree.ElementTree не расширяет внешние сущности и генерирует ParseError при возникновении сущности.
  3. xml.dom.minidom не расширяет внешние сущности и просто возвращает нерасширенную сущность в точности.
  4. xmlrpc.client не расширяет внешние сущности и опускает их.
  5. С Python 3.7.1 внешние общие сущности по умолчанию больше не обрабатываются.
  6. Expat 2.6.0 и более поздние версии не уязвимы для атак на отказ в обслуживании с помощью квадратичного времени выполнения, вызванного обработкой больших токенов. Элементы по-прежнему указаны как уязвимые из-за потенциальной зависимости от системных библиотек. Проверьте pyexpat.EXPAT_VERSION.
миллиард смеха / экспоненциальное расширение сущности

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

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

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

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

Определения сущностей могут содержать больше, чем просто текст для замены. Они также могут указывать на внешние ресурсы или локальные файлы. Парсер XML обращается к ресурсу и встраивает содержимое в документ XML.

получение DTD

Некоторые XML-библиотеки, такие как Python xml.dom.pulldom, получают определения типов документов из удаленных или локальных расположений. Эта функция имеет последствия, аналогичные проблеме расширения внешней сущности.

бомба сжатия

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

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

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

Документация defusedxml на PyPI содержит дополнительную информацию обо всех известных векторах атак с примерами и ссылками.

Пакет defusedxml

defusedxml — это чистый Python-пакет с измененными подклассами всех стандартных XML-парсеров, которые предотвращают любые потенциально злонамеренные операции. Использование этого пакета рекомендуется для любого серверного кода, который анализирует недоверенные данные XML. Пакет также поставляется с примерами эксплойтов и расширенной документацией по другим эксплойтам XML, таким как XPath-инъекция.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/xml.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API