Spec-Zone.ru › Python 3.9

Модули обработки 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 не расширяет внешние сущности и вызывает ParserError при появлении сущности.
  3. xml.dom.minidom не расширяет внешние сущности и просто возвращает нерасширенную сущность в первоначальном виде.
  4. xmlrpclib не расширяет внешние сущности и опускает их.
  5. Начиная с Python 3.7.1, внешние общие сущности по умолчанию не обрабатываются.
миллиард смеха / экспоненциальное расширение сущностей

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

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

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

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

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

получение DTD

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

бомба сжатия

Бомбы сжатия (также известные как ZIP-бомба) относятся ко всем библиотекам XML, которые могут анализировать сжатые потоки XML, такие как gzipped 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.9/library/xml.html

Spec-Zone.ru

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