XML处理模块¶
源码: Lib/xml/
用于处理XML的Python接口分组在 xml
包中。
备注
If you need to parse untrusted or unauthenticated data, see XML security.
值得注意的是 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 security¶
An attacker can abuse XML features to carry out denial of service attacks, access local files, generate network connections to other machines, or circumvent firewalls.
Expat versions lower that 2.6.0 may be vulnerable to "billion laughs",
"quadratic blowup" and "large tokens". Python may be vulnerable if it uses such
older versions of Expat as a system-provided library.
Check pyexpat.EXPAT_VERSION
.
xmlrpc
is vulnerable to the "decompression bomb" attack.
- 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。