Ctrl
+
D
一键收藏

XML处理模块

源代码: Lib/xml/


用于处理XML的python接口分组在 xml 包裹。

警告

XML模块对错误或恶意构造的数据不安全。如果需要分析不可信或未经身份验证的数据,请参阅 XML漏洞这个 defusedxml 包裹 部分。

重要的是要注意 xml 包要求至少有一个符合SAX的XML解析器可用。expat解析器包含在python中,因此 xml.parsers.expat 模块始终可用。

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

XML处理子模块包括:

XML漏洞

对恶意构造的数据不安全。攻击者可以利用XML功能执行拒绝服务攻击、访问本地文件、生成与其他计算机的网络连接或绕过防火墙。

下表概述了已知的攻击以及各种模块是否容易受到攻击。

友善的

萨克斯

埃特里

微型计算机

普拉多姆

XMLRPC

十亿笑声

Vulnerable

Vulnerable

Vulnerable

Vulnerable

Vulnerable

二次放大

Vulnerable

Vulnerable

Vulnerable

Vulnerable

Vulnerable

外部实体扩展

Safe (4)

Safe (1)

Safe (2)

Safe (4)

Safe (3)

DTD 检索

Safe (4)

保险柜

保险柜

Safe (4)

保险柜

减压炸弹

保险柜

保险柜

保险柜

保险柜

Vulnerable

  1. xml.etree.ElementTree 不展开外部实体并引发 ParserError 当实体发生时。

  2. xml.dom.minidom 不展开外部实体,只逐字返回未展开的实体。

  3. xmlrpclib 不展开外部实体并忽略它们。

  4. 自Python3.7.1以来,默认情况下不再处理外部常规实体。

亿笑/指数实体扩张

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

二次放大实体展开

二次爆破攻击类似于 Billion Laughs 攻击;它也滥用实体扩展。它不是嵌套的实体,而是一次又一次重复一个具有几千个字符的大型实体。这种攻击不如指数级攻击有效,但它避免触发禁止深度嵌套实体的解析器对策。

外部实体扩展

实体声明不能只包含用于替换的文本。它们还可以指向外部资源或本地文件。XML解析器访问资源并将内容嵌入到XML文档中。

DTD 检索

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

减压炸弹

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

文件 defusedxml 关于pypi有更多关于所有已知攻击向量的信息,包括示例和参考。

这个 defusedxml 包裹

defusedxml 是一个纯python包,包含所有stdlib xml解析器的修改子类,可以防止任何潜在的恶意操作。建议对解析不受信任的XML数据的任何服务器代码使用此包。该包还附带示例漏洞和更多XML漏洞(如XPath注入)的扩展文档。

Ctrl
+
D
一键收藏