XML处理模块 – 结构化标记处理工具(Python教程)(参考资料)
XML处理模块
源代码: Lib / xml
/用于处理XML的Python接口分组在xml
package.
Warning
XML模块对于错误或恶意构建的数据不安全。如果你需要解析不受信任的orunauthenticated数据,请参阅 XML漏洞和 defusedxml和defusedexpat包 sections.
值得注意的是xml
包中的模块要求至少有一个符合SAX的XML解析器可用。Expat解析器包含在Python中,所以xml.parsers.expat
模块总是可用的.
xml.dom
和xml.sax
包的文档是Python绑定的定义对于DOM和SAX接口.
XML处理子模块是:
xml.etree.ElementTree
:ElementTree API,一个简单而轻量级的XML处理器
XML漏洞
XML处理模块不能抵御恶意构造的数据。攻击者可能滥用XML功能执行拒绝服务攻击,访问本地文件,生成与其他计算机的网络连接,或者启动防火墙.
下表概述了已知的攻击以及各种模块是否容易受到攻击.
善 | sax | etree | minidom | pulldom | xmlrpc |
---|---|---|---|---|---|
十亿笑 | 易受攻击 | 易受攻击 | 易受攻击 | 易受攻击 | 易受攻击 |
二次爆炸 | 易受攻击 | 易受攻击 | 易受攻击 | 易受攻击 | 易受攻击 |
外部实体扩展 | 安全(4) | 安全(1) | 安全(2) | 安全(4) | 安全(3) |
DTD检索 | 安全(4) | 安全 | 安全 | 安全(4) | 安全 |
减压弹 | 安全 | 安全 | 安全 | 安全 | 弱势 |
xml.etree.ElementTree
不会扩展外部实体并在实体发生时提升ParserError
.xml.dom.minidom
不会扩展外部实体并且只是逐字地返回未扩展的实体.xmlrpclib
不扩展外部实体并省略它们.- 从Python 3.7.1开始,外部通用实体不再被默认处理
- billion笑/指数实体扩展
- Billion Laughs攻击 – 也称为指数实体扩展 – 使用多级嵌套实体。每个实体几次引用另一个实体,最后的实体定义包含一个小字符串。指数扩展产生几千兆字节的文本并占用大量的内存和CPU时间.
- 二次爆炸实体扩展
- 二次爆炸攻击类似于Billion Laughs攻击;滥用扩张也是如此。它不是嵌套实体,而是一遍又一遍地重复一个具有几千个字符的大型实体。攻击并不像指数情况那样有效,但它避免了触发解析器对策,禁止深层嵌套的实体.
- 外部实体扩展
- 实体声明可以包含的不仅仅是替换文本。他们还指向外部资源或本地文件。XMLparser访问资源并将内容嵌入到XML文档中.
- DTD检索
- 某些XML库(如Python)
xml.dom.pulldom
从远程或本地位置检索文档类型定义。该特征具有相似性作为外部实体扩展问题. - 压缩弹
- 减压炸弹(又名ZIP炸弹)适用于所有可以解析压缩XML流的XML库,例如gzip压缩流或LZMA压缩文件。对于攻击者来说,它可以将传输的数据量减少三个或更多.
PyPI上defusedxml的文档有关于所有已知攻击向量的更多信息,包括示例和参考文件.
defusedxml
和defusedexpat
包
defusedxml是一个纯Python包,包含所有stdlibXML解析器的修改子类,可防止任何潜在的恶意操作。对于解析不受信任的XML数据的任何服务器代码,建议使用此程序包。该软件包还提供了有关更多XML漏洞利用的示例漏洞利用和扩展文档,例如XPath注入.
defusedexpat提供了一个修改过的libexpat和一个修补的pyexpat
模块,它具有针对实体扩展DoS攻击的对策。defusedexpat
模块仍然允许一个理智且可配置的实体扩展量。修改可能包含在Python的某些未来版本中,但不会包含在任何错误修复版本的Python中,因为它们会破坏向后兼容性.
评论被关闭。