Содержание страницы
Модули обработки XML¶XML Processing Modules
Исходный код: Lib/xml/
Интерфейсы Python для обработки XML объединены в пакете xml.
Примечание
Если требуется разобрать непроверенные или неаутентифицированные данные, см. Безопасность XML.
Важно отметить, что модули в пакете 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 DOMxml.dom.minidom: минимальная реализация DOMxml.dom.pulldom: поддержка построения частичных DOM-деревьев
xml.sax: базовые классы SAX2 и вспомогательные функцииxml.parsers.expat: привязка анализатора Expat
Безопасность XML¶XML security
Злоумышленник может злоупотребить возможностями XML для осуществления атак типа «отказ в обслуживании», доступа к локальным файлам, создания сетевых подключений к другим машинам или обхода межсетевых экранов при разборе XML, управляемого злоумышленником, как в Python, так и в других средах.
Встроенные анализаторы XML в Python полагаются на библиотеку libexpat, обычно называемую Expat, для разбора XML.
По умолчанию сам Expat не обращается к локальным файлам и не создает сетевые подключения.
Версии Expat ниже 2.7.2 могут быть уязвимы к атакам «миллиард смешков», «квадратичный взрыв» и «большие токены», а также к непропорциональному использованию динамической памяти.
Python включает в себя копию Expat, и то, использует ли Python встроенную или системную версию Expat, зависит от того, как интерпретатор Python has been configured в вашем окружении.
Python может быть уязвим, если он использует такие старые версии Expat.
Проверьте pyexpat.EXPAT_VERSION.
xmlrpc уязвим к атаке «бомба декомпрессии».
- миллиард смешков / экспоненциальное расширение сущностей
Атака Billion Laughs (миллиард смешков) – также известная как экспоненциальное расширение сущностей – использует несколько уровней вложенных сущностей. Каждая сущность ссылается на другую сущность несколько раз, а определение конечной сущности содержит небольшую строку. Экспоненциальное расширение приводит к получению нескольких гигабайт текста и потребляет много памяти и процессорного времени.
- квадратичное расширение сущностей
Атака квадратичного взрыва аналогична атаке Billion Laughs; она также злоупотребляет расширением сущностей. Вместо вложенных сущностей она многократно повторяет одну большую сущность длиной в несколько тысяч символов. Такая атака не так эффективна, как экспоненциальная, но она позволяет обходить меры противодействия анализатора, запрещающие глубоко вложенные сущности.
- бомба декомпрессии
Бомбы декомпрессии (также известные как ZIP bomb) применимы ко всем библиотекам XML, которые могут анализировать сжатые потоки XML, такие как gzipped HTTP-потоки или файлы, сжатые LZMA. Для злоумышленника это может уменьшить объем передаваемых данных на три порядка и более.
- большие токены
Expat вынужден повторно разбирать незавершенные токены; без защиты, введенной в Expat 2.6.0, это может привести к квадратичному времени выполнения, которое может быть использовано для отказа в обслуживании в приложении, разбирающем XML. Проблема известна как CVE 2023-52425.