如何防止zip炸弹攻击?
我刚刚读到关于压缩炸弹的内容,也就是那些包含大量可以被高度压缩数据的压缩文件(比如00000000000000000...)。
当这些文件被打开时,会占满服务器的硬盘空间。
我想知道如何在解压之前就能检测出一个压缩文件是否是压缩炸弹?
更新:你能告诉我在Python或Java中是怎么做到的吗?
7 个回答
13
在维基百科上阅读描述时,
要拒绝任何包含压缩文件的压缩文件。
可以使用 ZipFile.entries() 来获取文件列表,然后用 ZipEntry.getName() 来查找文件的扩展名。
拒绝任何包含超过设定大小的文件的压缩文件,或者在启动时无法确定文件大小的压缩文件。
在遍历文件时,可以使用 ZipEntry.getSize() 来获取文件的大小。
25
Zip是一种“有趣”的文件格式。一个比较稳妥的做法是把数据流出来,直到你觉得够了为止。在Java中,建议使用ZipInputStream
,而不是ZipFile
。因为后者需要把数据存储在一个临时文件里,这样做其实并不是个好主意。
27
试试这个Python代码:
import zipfile
with zipfile.ZipFile('a_file.zip') as z
print(f'total files size={sum(e.file_size for e in z.infolist())}')