Документация Python неофициальный перевод

xml.md

79 строк · 8.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.16/library/xml.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Модули обработки XML89**Исходный код:** [Lib/xml/](https://python-all.ru/src/main/Lib/xml)1011---1213Интерфейсы Python для обработки XML объединены в пакете `xml`.1415> **Примечание**16>17> Если требуется разобрать непроверенные или неаутентифицированные данные, см. [Безопасность XML](https://python-all.ru/3.16/library/xml.html#xml-security).1819Важно отметить, что модули в пакете `xml` требуют наличия хотя бы одного SAX-совместимого анализатора XML. Анализатор Expat входит в состав Python, поэтому модуль [`xml.parsers.expat`](https://python-all.ru/3.16/library/pyexpat.html#module-xml.parsers.expat) всегда доступен.2021Документация пакетов [`xml.dom`](https://python-all.ru/3.16/library/xml.dom.html#module-xml.dom) и [`xml.sax`](https://python-all.ru/3.16/library/xml.sax.html#module-xml.sax) представляет собой описание привязок Python для интерфейсов DOM и SAX.2223Подмодули для работы с XML:2425- [`xml.etree.ElementTree`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#module-xml.etree.ElementTree): API ElementTree, простой и легковесный процессор XML2627- [`xml.dom`](https://python-all.ru/3.16/library/xml.dom.html#module-xml.dom): определение API DOM28- [`xml.dom.minidom`](https://python-all.ru/3.16/library/xml.dom.minidom.html#module-xml.dom.minidom): минимальная реализация DOM29- [`xml.dom.pulldom`](https://python-all.ru/3.16/library/xml.dom.pulldom.html#module-xml.dom.pulldom): поддержка построения частичных DOM-деревьев3031- [`xml.sax`](https://python-all.ru/3.16/library/xml.sax.html#module-xml.sax): базовые классы SAX2 и вспомогательные функции32- [`xml.parsers.expat`](https://python-all.ru/3.16/library/pyexpat.html#module-xml.parsers.expat): привязка анализатора Expat3334Этот модуль также определяет вспомогательные функции.3536#### `xml.is_valid_name(name)`3738Возвращает `True`, если строка является допустимым именем элемента или атрибута, иначе `False`.3940Почти все символы разрешены в именах, за исключением управляющих символов и тех, которые являются или могут обоснованно использоваться в качестве разделителей. Символы, такие как «:», «-», «.», «\_» и «·», разрешены, а «\<», «/», «!», «?», и «=» запрещены. Имя не может начинаться с цифры или символа, такого как «-», «.» и «·».4142Добавлено в версии 3.15.4344#### `xml.is_valid_text(data)`4546Возвращает `True`, если строка является последовательностью допустимых символов XML 1.0, иначе `False`.4748Почти все символы разрешены в документах XML 1.0, за исключением управляющих символов C0 (кроме TAB, CR и LF), суррогатных символов и специальных символов Unicode U+FFFE и U+FFFF.4950Добавлено в версии 3.15.5152## Безопасность XML5354Злоумышленник может злоупотребить возможностями XML для осуществления атак типа «отказ в обслуживании», доступа к локальным файлам, создания сетевых подключений к другим машинам или обхода межсетевых экранов при разборе XML, управляемого злоумышленником, как в Python, так и в других средах.5556Встроенные анализаторы XML в Python полагаются на библиотеку [libexpat](https://python-all.ru/3.16/library/xml.html), обычно называемую Expat, для разбора XML.5758По умолчанию сам Expat не обращается к локальным файлам и не создает сетевые подключения.5960Версии Expat ниже 2.7.2 могут быть уязвимы к атакам «миллиард смешков», «квадратичный взрыв» и «большие токены», а также к непропорциональному использованию динамической памяти. Python включает в себя копию Expat, и то, использует ли Python встроенную или системную версию Expat, зависит от того, как интерпретатор Python [`has been configured`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-system-expat) в вашем окружении. Python может быть уязвим, если он использует такие старые версии Expat. Проверьте `pyexpat.EXPAT_VERSION`.6162[`xmlrpc`](https://python-all.ru/3.16/library/xmlrpc.html#module-xmlrpc) **уязвим** к атаке «бомба декомпрессии».6364**миллиард смешков / экспоненциальное расширение сущностей**6566Атака [Billion Laughs](https://python-all.ru/3.16/library/xml.html) (миллиард смешков) – также известная как экспоненциальное расширение сущностей – использует несколько уровней вложенных сущностей. Каждая сущность ссылается на другую сущность несколько раз, а определение конечной сущности содержит небольшую строку. Экспоненциальное расширение приводит к получению нескольких гигабайт текста и потребляет много памяти и процессорного времени.6768**квадратичное расширение сущностей**6970Атака квадратичного взрыва аналогична атаке [Billion Laughs](https://python-all.ru/3.16/library/xml.html); она также злоупотребляет расширением сущностей. Вместо вложенных сущностей она многократно повторяет одну большую сущность длиной в несколько тысяч символов. Такая атака не так эффективна, как экспоненциальная, но она позволяет обходить меры противодействия анализатора, запрещающие глубоко вложенные сущности.7172**бомба декомпрессии**7374Бомбы декомпрессии (также известные как [ZIP bomb](https://python-all.ru/3.16/library/xml.html)) применимы ко всем библиотекам XML, которые могут анализировать сжатые потоки XML, такие как gzipped HTTP-потоки или файлы, сжатые LZMA. Для злоумышленника это может уменьшить объем передаваемых данных на три порядка и более.7576**большие токены**7778Expat вынужден повторно разбирать незавершенные токены; без защиты, введенной в Expat 2.6.0, это может привести к квадратичному времени выполнения, которое может быть использовано для отказа в обслуживании в приложении, разбирающем XML. Проблема известна как [**CVE 2023-52425**](https://python-all.ru/3.16/library/xml.html).79