我刚刚看了一下拉链炸弹 ,即含有非常大量的高压缩数据(000000000亿...)的zip文件。
当打开他们填写服务器的磁盘。
我怎么能检测一个压缩文件解压是前一个zip炸弹?
更新您可以告诉我这是怎么在Python或Java做了什么?
我刚刚看了一下拉链炸弹 ,即含有非常大量的高压缩数据(000000000亿...)的zip文件。
当打开他们填写服务器的磁盘。
我怎么能检测一个压缩文件解压是前一个zip炸弹?
更新您可以告诉我这是怎么在Python或Java做了什么?
在Python试试这个:
import zipfile
z = zipfile.ZipFile('c:/a_zip_file')
print 'total files size=', sum(e.file_size for e in z.infolist())
z.close()
Zip is, erm, an "interesting" format. A robust solution is to stream the data out, and stop when you have had enough. In Java, use ZipInputStream
rather than ZipFile
. The latter also requires you to store the data in a temporary file, which is also not the greatest of ideas.
在阅读维基百科上的描述 -
拒绝包含压缩文件的任何压缩的文件。
使用ZipFile.entries()来检索文件的列表,然后ZipEntry.getName()找到文件扩展名。
拒绝包含的文件超过设定的大小,否则无法在启动时确定大小的任何压缩的文件。
虽然遍历文件使用ZipEntry.getSize()来检索文件的大小。
首先检查拉链头:)
不要让上传程序写入足够的数据来填满磁盘,即解决问题,而不只是问题的一个可能的原因。
如果ZIP解压缩使用可以提供原始和压缩大小的数据,你可以使用这些数据。 否则,开始解压缩并监视输出尺寸 - 如果它生长太切,使其松弛。
确保你没有使用你的系统驱动器用于临时存储。 我不知道如果遇到它virusscanner将检查。
你也可以看看在zip文件里面的信息和检索内容的列表。 如何做到这一点取决于用于提取文件的工具,所以你需要在这里提供更多信息