使用修改过的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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f0185c81ef89879b6e40107d6e42b4175eaa812401eec79f18f3d88297822345 |
|
MD5 | d870a2eb4137d676df896719cdd52a55 |
|
BLAKE2b-256 | 2fcc56e82058fa3bfbe75b8601f91e0ed2b586fb6aef3105fc0ff734371971e3 |
defusedexpat-0.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 43622e7fc95a55049a1b755d421cd1ef05e854609db0313cd826a3b873a6debd |
|
MD5 | 8091bb85a6842456a4b7fe842dc13f89 |
|
BLAKE2b-256 | c16b5885b434e95ebfa35b7c4fa48019c8c676f7475e01074da84e0840e521df |