Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何预防;亿笑",;Python中的DoS攻击&x27;什么是xlrd?_Python_Xml_Xlsx_Xlrd_Client Side Attacks - Fatal编程技术网

如何预防;亿笑",;Python中的DoS攻击&x27;什么是xlrd?

如何预防;亿笑",;Python中的DoS攻击&x27;什么是xlrd?,python,xml,xlsx,xlrd,client-side-attacks,Python,Xml,Xlsx,Xlrd,Client Side Attacks,通过简单地阻止XML文件中的实体被扩展,DoS攻击似乎是可以预防的。在Python的xlrd库中是否有这样做的方法(即某种标志)?如果没有,是否有建议的方法来避免攻击?不使用xlrd本身 目前,xlrd中没有防止任何XML炸弹的选项。在中,xlsx数据被传递到python的内置xml.etree进行解析,无需任何验证: import xml.etree.ElementTree as ET def process_stream(self, stream, heading=None):

通过简单地阻止XML文件中的实体被扩展,DoS攻击似乎是可以预防的。在Python的xlrd库中是否有这样做的方法(即某种标志)?如果没有,是否有建议的方法来避免攻击?

不使用xlrd本身 目前,xlrd中没有防止任何XML炸弹的选项。在中,xlsx数据被传递到python的内置
xml.etree
进行解析,无需任何验证:

import xml.etree.ElementTree as ET

def process_stream(self, stream, heading=None):
        if self.verbosity >= 2 and heading is not None:
            fprintf(self.logfile, "\n=== %s ===\n", heading)
        self.tree = ET.parse(stream)
但是,可以使用defusedxml修补
ElementTree
如评论中所述,是一个直接针对针对不同类型XML炸弹的安全问题的包。从文档中:

而不是:

from xml.etree.ElementTree import parse
et = parse(xmlfile)
将代码更改为:

from defusedxml.ElementTree import parse
et = parse(xmlfile)
它还提供了修补标准库的功能。因为这就是xlrd所使用的,所以您可以结合使用xlrd和defusedxml来读取Excel文件,同时保护自己免受XML炸弹的攻击

此外,该软件包还具有一个未经测试的功能,可以使用defusedxml.defuse_stdlib()对所有stdlib模块进行猴补丁


我还没有尝试过,但是如果尝试用xlrd加载示例XML文件(来自wikipedia文章中的),会发生什么?它能处理吗?@Legostrmtroppr它会停滞很长很长时间。我并没有一直等待,但我希望它最终会导致溢出。我尝试使用defusedxml,但它根本不处理xml炸弹。也许我没有很好地使用它,但我测试了它的基本功能,它只阻止了包含实体、DTD等的xml。还有另一个名为defusedexpat的python包,它倾向于处理xml炸弹,但不幸的是也没有很好地工作。