Модули обработки XML¶
Исходный код: Lib/xml/
Интерфейсы Python для обработки XML сгруппированы в пакет xml
.
Предупреждение
Модули XML не защищены от ошибочных или злонамеренно сконструированных данных. Если вам необходимо проанализировать данные, которым нет доверия или которые не прошли проверку подлинности, обратитесь к разделам Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен. и Пакет defusedxml.
Важно отметить, что для модулей в пакете xml
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль xml.parsers.expat
всегда будет доступен.
Важно отметить, что для модулей в пакете xml.dom
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль xml.sax
всегда будет доступен.
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.
Важно отметить, что для модулей в пакете
xml.etree.ElementTree
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.
Важно отметить, что для модулей в пакете
xml.dom
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.Важно отметить, что для модулей в пакете
xml.dom.minidom
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.Важно отметить, что для модулей в пакете
xml.dom.pulldom
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.
Важно отметить, что для модулей в пакете
xml.sax
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.Важно отметить, что для модулей в пакете
xml.parsers.expat
требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.¶
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен.
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен. |
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен. |
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен. |
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен. |
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен. |
Важно отметить, что для модулей в пакете требуется, чтобы был доступен хотя бы один синтаксический анализатор XML, совместимый с SAX. Синтаксический анализатор Expat включен в состав Python, поэтому модуль всегда будет доступен. |
---|---|---|---|---|---|
миллиард смешков |
Уязвимый (1) |
Уязвимый (1) |
Уязвимый (1) |
Уязвимый (1) |
Уязвимый (1) |
квадратичное увеличение |
Уязвимый (1) |
Уязвимый (1) |
Уязвимый (1) |
Уязвимый (1) |
Уязвимый (1) |
расширение внешнего объекта |
Сейф (5) |
Сейф (2) |
Сейф (3) |
Сейф (5) |
Сейф (4) |
DTD извлечение |
Сейф (5) |
Безопасно |
Безопасно |
Сейф (5) |
Безопасно |
декомпрессионная бомба |
Безопасно |
Безопасно |
Безопасно |
Безопасно |
Уязвимый |
крупные токены |
Уязвимый (6) |
Уязвимый (6) |
Уязвимый (6) |
Уязвимый (6) |
Уязвимый (6) |
Expat версии 2.4.1 и новее не подвержен уязвимостям «миллиардный смех» и «квадратичное увеличение». Элементы по-прежнему указаны как уязвимые из-за потенциальной зависимости от системных библиотек. Отметьте
pyexpat.EXPAT_VERSION
.xml.etree.ElementTree
не расширяет внешние объекты и создаетParseError
при появлении объекта.xml.dom.minidom
не расширяет внешние объекты и просто возвращает нерасширенный объект дословно.xmlrpc.client
не раскрывает внешние объекты и опускает их.Начиная с версии Python 3.7.1, внешние общие объекты больше не обрабатываются по умолчанию.
Expat версии 2.6.0 и новее не подвержен отказу в обслуживании из-за квадратичной среды выполнения, вызванной разбором больших токенов. Элементы по-прежнему указаны как уязвимые из-за потенциальной зависимости от системных библиотек. Отметьте
pyexpat.EXPAT_VERSION
.
- миллиард смешков / экспоненциальное расширение сущности
Атака Billion Laughs, также известная как экспоненциальное расширение объекта, использует несколько уровней вложенных объектов. Каждый объект ссылается на другой объект несколько раз, а окончательное определение объекта содержит небольшую строку. Экспоненциальное расширение приводит к увеличению объема текста до нескольких гигабайт и потребляет много памяти и процессорного времени.
- квадратичное расширение объекта с раздутием
Атака с квадратичным расширением похожа на атаку Billion Laughs; она также злоупотребляет расширением сущностей. Вместо вложенных сущностей она повторяет одну большую сущность с парой тысяч символов снова и снова. Атака не так эффективна, как в экспоненциальном случае, но она позволяет избежать запуска контрмер синтаксического анализа, которые запрещают глубоко вложенные объекты.
- расширение внешнего объекта
Объявления сущностей могут содержать не только текст для замены. Они также могут указывать на внешние ресурсы или локальные файлы. Синтаксический анализатор XML обращается к ресурсу и вставляет содержимое в XML-документ.
- DTD извлечение
Некоторые библиотеки XML, такие как
xml.dom.pulldom
в Python, извлекают определения типов документов из удаленных или локальных хранилищ. Эта функция имеет те же последствия, что и проблема расширения внешнего объекта.- декомпрессионная бомба
Декомпрессионные бомбы (они же ZIP bomb) применяются ко всем XML-библиотекам, которые могут анализировать сжатые XML-потоки, такие как HTTP-потоки в формате gzip или файлы, сжатые с помощью LZMA. Для злоумышленника это может уменьшить объем передаваемых данных в три раза и более.
- крупные токены
Expat необходимо повторно проанализировать незавершенные токены; без защиты, введенной в Expat 2.6.0, это может привести к сбоям во время выполнения, которые могут быть использованы для отказа в обслуживании в приложении, выполняющем синтаксический анализ XML. Проблема известна как CVE-2023-52425.
Документация для defusedxml на PyPI содержит дополнительную информацию обо всех известных векторах атак с примерами и ссылками.
Пакет defusedxml
¶
defusedxml - это пакет на чистом Python с измененными подклассами всех XML-анализаторов stdlib, которые предотвращают любые потенциально вредоносные операции. Рекомендуется использовать этот пакет для любого серверного кода, который анализирует ненадежные XML-данные. Пакет также поставляется с примерами эксплойтов и расширенной документацией по другим эксплойтам XML, таким как внедрение XPath.