XML处�模�¶

��: Lib/xml/


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

警告

XML 模�对于错误或��构造的数�是�安全的。 如果你需�解���信任或未�身份验�的数�,请�阅 XML �洞 和 defusedxml 包 部分。

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

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

XML 处��模�包括:

  • xml.etree.ElementTree: ElementTree API,一个简å�•而轻é‡�级的XML处ç�†å™¨

  • xml.sax:SAX2 基类和便利函数

  • xml.parsers.expat:Expatè§£æž�器绑定

XML �洞¶

XML 处�模�对于��构造的数�是�安全的。 攻击者�能滥用 XML 功能�执行拒��务攻击�访问本地文件�生�与其它计算机的网络连接或绕过防�墙。

下表概述了已知的攻击以���模�是�容易�到攻击。

�类

sax

etree

minidom

pulldom

xmlrpc

billion laughs

易�攻击 (1)

易�攻击 (1)

易�攻击 (1)

易�攻击 (1)

易�攻击 (1)

quadratic blowup

易�攻击 (1)

易�攻击 (1)

易�攻击 (1)

易�攻击 (1)

易�攻击 (1)

external entity expansion

安全 (5)

安全 (2)

安全 (3)

安全 (5)

安全 (4)

DTD retrieval

安全 (5)

安全

安全

安全 (5)

安全

decompression bomb

安全

安全

安全

安全

易�攻击

解�大��元

易�攻击 (6)

易�攻击 (6)

易�攻击 (6)

易�攻击 (6)

易�攻击 (6)

  1. Expat 2.4.1 �更新的版本�易� "billion laughs" 和 "quadratic blowup" �洞的影�。 因为�能��赖系统�供的库而�被列为易�攻击的项。 请检查 pyexpat.EXPAT_VERSION。

  2. xml.etree.ElementTree �会扩展外部实体并将在�到实体时引� ParseError。

  3. xml.dom.minidom �会扩展外部实体,�是简�地返回未扩展的实体。

  4. xmlrpc.client �会扩展外部实体并将忽略它们。

  5. 从 Python 3.7.1 开始,默认情况下��处�外部通用实体。

  6. Expat 2.6.0 �更新的版本�易�到因解�大��元而导致利用指数级�行时间的拒��务攻击。 由于对系统所�供的库的潜在�赖�会有一些项目被列为易�攻击。 请检查 pyexpat.EXPAT_VERSION。

billion laughs / exponential entity expansion (狂笑/递归实体扩展)

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

quadratic blowup entity expansion(二次爆炸实体扩展)

二次爆炸攻击类似于 Billion Laughs 攻击;它也滥用了实体扩展。 它�是嵌套实体,而是一��一�地��一个具有几�个字符的大型实体。 这�攻击�如递归情况有效,但它���触��止深度嵌套实体的解�器对策。

external entity expansion

实体声明�以包�的�仅仅是替�文本。 它们还�以指�外部资�或本地文件。 XML 解�器访问资�并将内容嵌入到 XML 文档中。

DTD retrieval

Python 的一些 XML 库 xml.dom.pulldom 从远程或本地�置检索文档类型定义。 该功能与外部实体扩展问题具有相似的�义。

decompression bomb

Decompression bombs(解压炸弹,�� ZIP bomb)适用于所有�以解�压缩 XML �(例如 gzip 压缩的 HTTP �或 LZMA 压缩的文件)的 XML 库。 对于攻击者�说,它�以将传输的数���少三个�级或更多。

解�大��元

Expat 需��新解�未完�的�元;在没有 Expat 2.6.0 所引入的防护措施的情况下,这会导致�被用�在解� XML 的应用程�中制造拒��务攻击的指数级�行时间。 此问题被称为 CVE-2023-52425。

PyPI上 defusedxml 的文档包�有关所有已知攻击��的更多信�以�示例和�考。

defusedxml 包¶

defusedxml 是一个纯 Python 软件包,它修改了所有标准库 XML 解�器的�类,�以防止任何潜在的���作。 对于解���信任的XML数�的任何�务器代�,建议使用此程�包。 该软件包还�供了有关更多 XML �洞(如 XPath 注入)的示例�洞和扩展文档。