Spec-Zone.ru › Python 3.11

Модули обработки 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: API 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)

Безопасно

бомба сжатия

Безопасно

Безопасно

Безопасно

Безопасно

Уязвим

  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, внешние общие сущности по умолчанию больше не обрабатываются.
миллиард хохотов / экспоненциальное расширение сущностей

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

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

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

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

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

получение DTD

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

бомба сжатия

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

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

Пакет defusedxml

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

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

Spec-Zone.ru

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