Модули обработки 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.