跳转到主要内容

使用修改过的expat解析器的XML炸弹防护

项目描述

defusedexpat保护Python标准库的XML包免受多种拒绝服务漏洞和外部实体攻击。它包含

  • 修改和增强的expat解析器库版本

  • pyexpat和cElementTree的_elementtree扩展模块的替代方案

  • 替换内置扩展的加载器代码

  • 对xml.sax和xml.dom的猴子补丁,以防止外部实体展开

为了保护您的应用程序,您必须在导入stdlib的任何XML模块之前导入defusedxml模块。

对策

  • 有限的实体展开级别,以对抗亿万笑攻击

  • 有限的展开总长度,以防止平方级爆炸

  • 防止检索外部实体和DTD的猴子补丁

修改

pyexpat中的修改

解析器对象

新的解析器属性(读写)

  • max_entity_indirections

  • max_entity_expansions

  • reset_dtd

模块常量

  • XML_DEFAULT_MAX_ENTITY_INDIRECTIONS

  • XML_DEFAULT_MAX_ENTITY_EXPANSIONS

  • XML_BOMB_PROTECTION

模块函数

  • get_reset_dtd(), set_reset_dtd(bool)

  • get_max_entity_expansions(), set_max_entity_expansions(int)

  • get_max_entity_indirections(), et_max_entity_indirections(int)

新的CAPI成员

  • capi.GetFeature

  • capi.SetFeature

  • capi.GetFeatureDefault

  • capi.SetFeatureDefault

_elementtree扩展模块中的修改

_elementtree.XMLParser

新的参数和只读属性

  • max_entity_indirections

  • max_entity_expansions

  • ignore_dtd

expat中的修改

新的定义

XML_BOMB_PROTECTION
XML_DEFAULT_MAX_ENTITY_INDIRECTIONS
XML_DEFAULT_MAX_ENTITY_EXPANSIONS
XML_DEFAULT_RESET_DTD

新的XML_FeatureEnum成员

XML_FEATURE_MAX_ENTITY_INDIRECTIONS
XML_FEATURE_MAX_ENTITY_EXPANSIONS
XML_FEATURE_IGNORE_DTD

新的XML_Error成员

XML_ERROR_ENTITY_INDIRECTIONS
XML_ERROR_ENTITY_EXPANSION

新的API函数

int XML_GetFeature(XML_Parser parser,
                   enum XML_FeatureEnum feature,
                   long *value);
int XML_SetFeature(XML_Parser parser,
                   enum XML_FeatureEnum feature,
                   long value);
int XML_GetFeatureDefault(enum XML_FeatureEnum feature,
                          long *value);
int XML_SetFeatureDefault(enum XML_FeatureEnum feature,
                          long value);
XML_FEATURE_MAX_ENTITY_INDIRECTIONS

限制在嵌套实体展开过程中允许发生的间接引用数量。当遇到实体引用时启动计数器。实体完全展开后重置。该限制可保护解析器免受指数级实体展开攻击(又称“亿笑攻击”)。当超出限制时,解析器停止并失败,返回XML_ERROR_ENTITY_INDIRECTIONS。0值将禁用保护。

支持范围

0 .. UINT_MAX

默认值

40

XML_FEATURE_MAX_ENTITY_EXPANSIONS

限制整个文档中所有实体展开的总长度。所有实体的长度都累积在解析器变量中。该设置可保护解析器免受平方级爆炸攻击(大量展开大型实体声明)。当所有实体的总和超出限制时,解析器停止并失败,返回XML_ERROR_ENTITY_EXPANSION。0值将禁用保护。

支持范围

0 .. UINT_MAX

默认值

8 MiB

XML_FEATURE_RESET_DTD

在解析完块后重置所有DTD信息。当设置标志(默认:false)时,在调用endDoctypeDeclHandler之后,所有DTD信息将被重置。该标志可以在endDoctypeDeclHandler内部设置。如果没有DTD信息,文档体中的任何实体引用都会导致XML_ERROR_UNDEFINED_ENTITY

支持范围

0, 1

默认值

0

需求

  • Python 2.6.6或更高版本(对于随机哈希,2.6.8或更高版本)

  • Python 2.7(对于随机哈希和Windows二进制文件,2.7.3或更高版本)

  • Python 3.1(对于随机哈希和Windows二进制文件,3.1.5或更高版本)

  • Python 3.2(对于随机哈希和Windows二进制文件,3.2.3或更高版本)

  • Python 3.3.0或更高版本

Windows二进制文件与2.6.6、2.7.3、3.1.5、3.2.3或3.3.0或更高微版本兼容。它们不支持旧版本。

许可证

版权(c)2013年Christian Heimes <christian@python.org>

根据贡献者协议许可PSF使用。

有关许可详细信息,请参阅https://pythonlang.cn/psf/license

贡献者

Antoine Pitrou

代码审查

Brett Cannon

代码审查

变更日志

defusedexpat 0.4

发布日期:2013年2月25日

  • 使代码源与没有哈希随机化的Python版本兼容。

  • 包含最新的expat补丁版本

defusedexpat 0.3

发布日期:2013年2月19日

  • 由于代理技巧不起作用,禁用Windows上的某些测试

  • 从CAPI MAGIC中删除“炸弹保护”后缀

  • 当XML_BOMB_PROTECTION不可用时,不支持_elementtree的额外kwargs。

  • 在expat中实现更好的、更灵活的get/set功能API

  • 添加模块函数以设置全局设置

defusedexpat 0.2

发布日期:2013年2月15日

  • Python 3.1支持

  • 其他修复和改进

defusedexpat 0.1

发布日期:2013年2月11日

  • PSRT审查的初始和内部发布

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

defusedexpat-0.4.zip (275.9 kB 查看散列)

上传于 源代码

defusedexpat-0.4.tar.gz (259.3 kB 查看哈希值)

上传于 源代码

构建版本

defusedexpat-0.4.win-amd64-py3.3.exe (324.4 kB 查看哈希值)

上传于 源代码

defusedexpat-0.4.win-amd64-py3.2.exe (324.1 kB 查看哈希值)

上传于 源代码

defusedexpat-0.4.win-amd64-py2.7.exe (322.1 kB 查看哈希值)

上传于 源代码

defusedexpat-0.4.win-amd64-py2.6.exe (320.7 kB 查看哈希值)

上传于 源代码

defusedexpat-0.4.win32-py3.3.exe (284.2 kB 查看哈希值)

上传于 源代码

defusedexpat-0.4.win32-py3.2.exe (284.0 kB 查看哈希值)

上传于 源代码

defusedexpat-0.4.win32-py2.7.exe (282.5 kB 查看哈希值)

上传于 源代码

defusedexpat-0.4.win32-py2.6.exe (281.6 kB 查看哈希值)

上传于 源代码

由以下支持