Модули обработки 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 ElityTree, простой и легкий XML-процессор
xml.dom: определение DOM APIxml.dom.minidom: минимальная реализация DOMxml.dom.pulldom: поддержка построения частичных деревьев DOMы
xml.sax: SAX2 базовые классы и удобные функцииxml.parsers.expat: биндинг к Expat парсеру
Уязвимости XML¶
Модули обработки XML не защищены от вредоносно созданных данных. Злоумышленник может злоупотреблять функциями XML для выполнения атак типа «отказ в обслуживании», доступа к файлам локальная, создания сетевых подключений к другим машинам или обхода брандмауэров.
В следующей таблице представлен обзор известных атак и того, уязвимы ли для них различные модули.
| вид | sax | etree | minidom | pulldom | xmlrpc | 
|---|---|---|---|---|---|
| миллиард смеха | Уязвимый | Уязвимый | Уязвимый | Уязвимый | Уязвимый | 
| квадратичное раздутие | Уязвимый | Уязвимый | Уязвимый | Уязвимый | Уязвимый | 
| расширение внешнего объекта | Безопасный (4) | Безопасный (1) | Безопасный (2) | Безопасный (4) | Безопасный (3) | 
| DTD поиск | Безопасный (4) | Безопасный | Безопасный | Безопасный (4) | Безопасный | 
| декомпрессионная бомба | Безопасный | Безопасный | Безопасный | Уязвимый | 
xml.etree.ElementTreeне расширяет внешние объекты и вызываетParserErrorпри возникновении объекта.xml.dom.minidomне расширяет внешние сущности и просто возвращает нерасчетную сущность дословно.xmlrpclibне расширяет внешние объекты и пропускает их.- Начиная с Python 3.7.1 внешние общие объекты больше не обрабатываются по умолчанию.
 
- миллиард смеха / экспоненциальное расширение сущности
 - Атака Миллиард смеха, также известная как экспоненциальное расширение объектов, использует несколько уровней вложенных объектов. Каждый объект ссылается на другой объект несколько раз, и окончательное определение объекта содержит небольшой строка. Экспоненциальное расширение приводит к появлению нескольких гигабайт текста и потребляет много памяти и времени ЦП.
 - квадратичное расширение раздуваемого объекта
 - Квадратичная взрывная атака похожа на Миллиард смеха атаку; он также злоупотребляет расширением образований. Вместо вложенных объектов он повторяет один большой объект с парой тысяч символов снова и снова. Атака не так эффективна, как экспоненциальный случай, но она позволяет избежать запуска парсер контрмер, которые запрещают глубоко вложенные сущности.
 - расширение внешнего объекта
 - Объявления сущностей могут содержать не только текст для замены. Они также могут указывать на внешние ресурсы или локальная файлы. XML- парсер обращается к ресурсу и встраивает содержимое в XML-документ.
 - DTD поиск
 - Некоторые библиотеки XML, такие как Python’s 
xml.dom.pulldom, извлекают определения типов документов из удаленных или локальная расположений. Эта функция имеет те же последствия, что и проблема расширения внешнего объекта. - декомпрессионная бомба
 - Бомбы декомпрессии (иначе ZIP бомба) применяются ко всем библиотекам XML, которые могут анализировать сжатые XML-потоки, такие как gzipped HTTP-потоки или LZMA-compressed файлы. Для злоумышленника это может уменьшить объем передаваемых данных на три величины и более.
 
Документация для defusedxml по PyPI содержит дополнительную информацию обо всех известных векторах атак с примерами и ссылками.
Пакет defusedxml¶
defusedxml — это чистый Python пакет с модифицированными подклассами всех анализаторов XML stdlib, которые предотвращают любые потенциально вредоносные операции. Использование этого пакета рекомендуется для любого серверного кода, который анализирует ненадежные данные XML. Пакет также поставляется с примерами эксплойтов и расширенной документацией по большему количеству эксплойтов XML, таких как внедрение XPath.
