Модули обработки XML
Исходный код: Lib/xml/
Интерфейсы Python для обработки XML сгруппированы в пакете xml.
Примечание
Если вам нужно разобрать недоверенные или неаутентифицированные данные, см. раздел Безопасность XML.
Важно отметить, что модулям в пакете xml требуется наличие как минимум одного XML-анализатора, совместимого с SAX. Анализатор 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 в Python или других средах.
Встроенные XML-анализаторы Python используют для разбора XML библиотеку libexpat, обычно называемую Expat.
По умолчанию Expat не обращается к локальным файлам и не создает сетевых подключений.
Версии Expat ниже 2.7.2 могут быть уязвимы к атакам «миллиард смешков», «квадратичный рост» и «большие токены», а также к непропорциональному использованию динамической памяти. Python включает собственную копию Expat, а то, использует ли Python встроенную или системную версию Expat, зависит от того, как интерпретатор Python has been configured в вашей среде. Python может быть уязвим, если использует такие старые версии Expat. Проверьте pyexpat.EXPAT_VERSION.
xmlrpc уязвим к атаке «бомба распаковки».
- атака «миллиард смешков» / экспоненциальное расширение сущностей
-
Атака «миллиард смешков» — также известная как экспоненциальное расширение сущностей — использует несколько уровней вложенных сущностей. Каждая сущность несколько раз ссылается на другую, а определение последней сущности содержит короткую строку. Экспоненциальное расширение приводит к появлению нескольких гигабайт текста и потребляет много памяти и процессорного времени.
- атака квадратичного роста при расширении сущностей
-
Атака квадратичного роста похожа на атаку «миллиард смешков»; в ней также используется расширение сущностей. Вместо вложенных сущностей одна большая сущность размером в пару тысяч символов повторяется снова и снова. Эта атака не так эффективна, как экспоненциальная, но позволяет избежать срабатывания защитных мер анализатора, запрещающих глубоко вложенные сущности.
- бомба распаковки
-
Бомбы распаковки (также известные как ZIP-бомбы) представляют угрозу для всех библиотек XML, которые могут разбирать сжатые потоки XML, например потоки HTTP с gzip-сжатием или файлы, сжатые с помощью LZMA. Злоумышленник может сократить объем передаваемых данных в тысячу раз или более.
- большие токены
-
Expat должен повторно разбирать незавершенные токены; без защиты, добавленной в Expat 2.6.0, это может привести к квадратичному времени выполнения, которое можно использовать для организации отказа в обслуживании приложения, разбирающего XML. Эта проблема известна как CVE 2023-52425.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/xml.html