# XML处理模块

源码： Lib/xml/

用于处理XML的Python接口分组在 `xml` 包中。

备注

如果你需要解析不受信任或未经身份验证的数据，请参阅 XML 安全。

值得注意的是 `xml` 包中的模块要求至少有一个 SAX 兼容的 XML 解析器可用。在 Python 中包含 Expat 解析器，因此 `xml.parsers.expat` 模块将始终可用。

`xml.dom` 和 `xml.sax` 包的文档是 DOM 和 SAX 接口的 Python 绑定的定义。

XML 处理子模块包括:

- `xml.etree.ElementTree`： ElementTree API，一个简单而轻量级的XML处理器

- `xml.dom`：DOM API 定义

- `xml.dom.minidom`：最小的 DOM 实现

- `xml.dom.pulldom`：支持构建部分 DOM 树

- `xml.sax`：SAX2 基类和便利函数

- `xml.parsers.expat`：Expat解析器绑定

## XML 安全

攻击者可利用 XML 特性实施拒绝服务攻击、访问本地文件、建立与其他机器的网络连接，甚至绕过防火墙防护。

Expat 低于 2.6.0 的版本可能存在 "billion laughs", "quadratic blowup" 和 "large tokens" 等安全漏洞。 如果 Python 使用这些旧版 Expat 作为系统提供的库则可能受到影响。 请检查 `pyexpat.EXPAT_VERSION`。

`xmlrpc` 面对 "解压缩炸弹" 攻击时是 脆弱的。

billion laughs / exponential entity expansion （狂笑/递归实体扩展）

  Billion Laughs 攻击 -- 也称为递归实体扩展 -- 使用多级嵌套实体。 每个实体多次引用另一个实体，最终实体定义包含一个小字符串。 指数级扩展导致几千 GB 的文本，并消耗大量内存和 CPU 时间。

quadratic blowup entity expansion（二次爆炸实体扩展）

  二次爆炸攻击类似于 Billion Laughs 攻击；它也滥用了实体扩展。 它不是嵌套实体，而是一遍又一遍地重复一个具有几千个字符的大型实体。 这种攻击不如递归情况有效，但它可避免触发禁止深度嵌套实体的解析器对策。

decompression bomb

  Decompression bombs（解压炸弹，又名 ZIP bomb）适用于所有可以解析压缩 XML 流（例如 gzip 压缩的 HTTP 流或 LZMA 压缩的文件）的 XML 库。 对于攻击者来说，它可以将传输的数据量减少三个量级或更多。

解析大量词元

  Expat 需要重新解析未完成的词元；在没有 Expat 2.6.0 所引入的防护措施的情况下，这会导致可被用来在解析 XML 的应用程序中制造拒绝服务攻击的指数级运行时间。 此问题被称为 CVE 2023-52425。