xml不安全
billion laughs / exponential entity expansion
DoS攻击 利用xml解析器通常将整个文档存入内存,使用递归引用,消耗大量内存
quadratic blowup entity expansion
类似billion laughs但只是重复引用单实例,不递归
external entity expansion
解析时引入外部资源或本地文件,解析时会嵌入到xml文件中
DTD retrieval
利用文件的类型定义来引入文件,和external entity expansion类似
decompression bomb
通过压缩大文件,解析器解析出文件放入内存,过大崩溃
库的支持
所有库都能防止billion laughs和quadratic blowup
etree库
不解析external entities,会抛出异常
dom库中minidom
对于external entities原样返回
dom库中pulldom
在python3.7.1之后也原样返回
xmlrpclib
忽略external entities,但是不能防止decompression bomb
defusedxml
纯python实现的,可防止所有问题