我怎样才能保护自己免受压缩炸弹的伤害?
我刚刚阅读了关于邮政炸弹 ,即包含非常大量的高度可压缩数据(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文件中的信息并检索内容列表。 如何做到这一点取决于用于提取文件的实用程序,所以你需要在这里提供更多的信息