我怎样才能保护自己免受压缩炸弹的伤害?

我刚刚阅读了关于邮政炸弹 ,即包含非常大量的高度可压缩数据(00000000000000000 …)的zip文件。

打开时,它们将填充服务器的磁盘。

如何解压缩之前检测到一个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() 

邮编,呃,是一个“有趣”的格式。 一个可靠的解决scheme是stream出数据,并在足够的时候停止。 在Java中,使用ZipInputStream而不是ZipFile 。 后者还要求您将数据存储在临时文件中,这也不是最大的想法。

阅读维基百科上的描述 –

拒绝任何包含压缩文件的压缩文件。
使用ZipFile.entries()来检索文件列表,然后使用ZipEntry.getName()来查找文件扩展名。
拒绝包含超过设定大小的文件的任何压缩文件,或者在启动时无法确定大小。
在迭代文件时使用ZipEntry.getSize()来检索文件大小。

先查看一个zip头文件:)

如果您使用的ZIP解压缩程序可以提供原始和压缩大小的数据,则可以使用该数据。 否则,开始解压缩并监视输出大小 – 如果它变得太大,则将其松开。

不要让上传过程写入足够的数据来填满磁盘,即解决问题,而不仅仅是一个可能的原因。

确保您没有使用系统驱动器进行临时存储。 我不确定如果一个virusscanner会检查它是否遇到它。

您也可以查看zip文件中的信息并检索内容列表。 如何做到这一点取决于用于提取文件的实用程序,所以你需要在这里提供更多的信息