XML处理模块

源码: Lib/xml/


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

备注

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

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

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

XML 处理子模块包括:

XML 安全

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

Expat库版本低于 2.6.0 可能存在以下安全漏洞:"十亿笑声攻击"、"二次爆炸攻击" 和 "大令牌攻击"。 若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