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