代码之家  ›  专栏  ›  技术社区  ›  flybywire

我怎样才能保护自己免受拉链炸弹的袭击?

  •  50
  • flybywire  · 技术社区  · 15 年前

    我刚读到 zip bombs ,即包含大量高度可压缩数据的zip文件(0000000000000000…)。

    打开后,它们会填满服务器的磁盘。

    我怎样才能检测到一个压缩文件是一个压缩炸弹 之前 解开它?

    更新 你能告诉我这是如何在Python或Java中完成的?

    7 回复  |  直到 11 年前
        1
  •  21
  •   Nick Dandoulakis    15 年前

    在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()
    
        2
  •  19
  •   Tom Hawtin - tackline    15 年前

    Zip是一种“有趣的”格式。一个健壮的解决方案是输出数据流,并在您拥有足够的数据后停止。在爪哇,使用 ZipInputStream 而不是 ZipFile . 后者还要求您将数据存储在一个临时文件中,这也不是最伟大的想法。

        3
  •  11
  •   Michael Lloyd Lee mlk    15 年前

    阅读维基百科的描述-

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

        4
  •  5
  •   Vladislav Rastrusny    15 年前

    首先检查一个zip头:)

        5
  •  5
  •   Pete Kirkham    15 年前

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

        6
  •  4
  •   sharptooth    15 年前

    如果使用的zip解压器可以提供原始大小和压缩大小的数据,则可以使用该数据。否则,开始解压缩并监视输出大小-如果它增长太多,请将其松开。

        7
  •  1
  •   Heiko Hatzfeld    15 年前

    确保没有使用系统驱动器进行临时存储。我不确定病毒扫描者是否会检查它是否遇到它。

    您还可以查看zip文件中的信息并检索内容列表。如何执行此操作取决于用于提取文件的实用程序,因此您需要在此处提供更多信息