XML 处理模块

源代码: Lib/xml/


Python 用于处理 XML 的接口都归入 xml 包中。

备注

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

需要注意的是,xml 包中的模块要求至少有一个符合 SAX 标准的 XML 解析器可用。Expat 解析器随 Python 一起提供,因此 xml.parsers.expat 模块将始终可用。

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

XML 处理子模块包括

XML 安全

攻击者可以滥用 XML 功能进行拒绝服务攻击,访问本地文件,生成到其他机器的网络连接,或绕过防火墙。

低于 2.6.0 版本的 Expat 可能容易受到“十亿笑”、“二次膨胀”和“大令牌”漏洞的影响。如果 Python 使用旧版本的 Expat 作为系统提供的库,则可能容易受到攻击。请检查 pyexpat.EXPAT_VERSION

xmlrpc 容易受到“解压缩炸弹”攻击。

十亿笑 / 指数实体扩展

十亿笑攻击——也称为指数实体扩展——使用多层嵌套实体。每个实体多次引用另一个实体,最终的实体定义包含一个小的字符串。指数扩展导致数千兆字节的文本,并消耗大量内存和 CPU 时间。

二次膨胀实体扩展

二次膨胀攻击类似于十亿笑攻击;它也滥用实体扩展。它不是嵌套实体,而是重复一个包含几千个字符的大实体。这种攻击不如指数情况有效,但它避免了触发禁止深度嵌套实体的解析器对策。

解压缩炸弹

解压缩炸弹(又称 ZIP 炸弹)适用于所有可以解析压缩 XML 流的 XML 库,例如 gzipped HTTP 流或 LZMA 压缩文件。对于攻击者来说,它可以将传输的数据量减少三个数量级或更多。

大令牌

Expat 需要重新解析未完成的令牌;如果没有 Expat 2.6.0 中引入的保护,这可能会导致二次运行时,可用于导致解析 XML 的应用程序的拒绝服务。此问题被称为 CVE 2023-52425