Spec-Zone.ru › Python 3.8

Модули обработки 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: определение интерфейса 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)

Безопасно

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

Безопасно

Безопасно

Безопасно

Безопасно

Уязвим

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

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

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

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

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

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

получение DTD

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

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

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

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

Пакет defusedxml

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

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

Spec-Zone.ru

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