【问题标题】:is it dangerous to zip/unzip unknown uploaded files on server that may contain anything? even viruses?在服务器上压缩/解压缩可能包含任何内容的未知上传文件是否危险?甚至病毒?
【发布时间】:2012-08-24 18:56:21
【问题描述】:

我正在尝试实现一个用户系统(php、apache),用户可以在其中上传多个文件并下载它们的压缩版本。 (或上传压缩文件并下载未压缩文件)。

问题:压缩/解压缩这些未知文件是否有风险? 换句话说,unix/php zip/unzip 操作是否仅将文件视为文本,还是可以执行某些操作?

这个问题与所有压缩方法有关,zip 只是一个例子。

编辑: @Alex Brown 和 @Parallelis 写了 2 个风险,所以显然它不安全。 任何人都可以发布关于如何实现安全压缩/解压缩未知文件的简短说明?

【问题讨论】:

  • 主要危险来自编码绝对路径的 zip 文件。大多数解压缩实用程序都有强制相对解压缩的选项,为了安全起见,您还应该沙箱或 cheroot 解压缩操作。
  • ZIP 文件存在巨大风险:您可以将大量的 0(或任何其他常量字符)编码为一个小的 zip 文件,因此当它展开时,您可以快速填充文件系统!

标签: php apache file upload compression


【解决方案1】:

有几个潜在的问题:

  1. Zip 炸弹 - 这通常不再是什么大问题,因为大多数解压工具/语言都会阻止嵌套的解压级别。

  2. 相对路径:在我看来,这是您最关心的问题 - zip 已解压缩,但它包含文件:例如 ../../../../../../vendor/autoload.php.. 然后这会覆盖您的 autoload.php 文件并在有人查看时执行你的网页。游戏结束。

  3. 无数个inode。一个 zip 文件可能包含数百万个 0 字节的文件,会用完系统上所有可用的 inode。这将阻止硬盘在该分区上创建新文件。这可能是中坏。

【讨论】:

    【解决方案2】:

    您还应该知道 zip 档案可能包含符号链接。如果用户在解压缩后可以读取文件,则可以读取文件系统上的任意文件。

    zip 实用程序具有用于存储符号链接的 --symlinks 选项。

    【讨论】:

      【解决方案3】:

      因为这对我来说似乎是合理的。由于某些问题,您不能这样做,如果这些文件是引导脚本怎么办? (请参阅 Alex 和 Parallelis 的 cmets 了解另外 2 个问题)。

      解决方案:

      1. 如果您要在上传后将 zip 文件存储为 zip 文件,这样做您将面临其他问题,因为 zip 可能包含许多可能合适或不合适的文件。在这种情况下,您可能希望获取文件内容列表以自动包含在您的字段中,以便下载它们的人知道文件内容是否有效。您还可以与 ClamAV 之类的东西集成以扫描所有上传的文件。

        注意:Google 也在做同样的事情,他们使用他们的防病毒扫描程序(当然,这些程序不可供公众使用)。

      2. 您也可以先将文件放在临时目录中,然后在该位置对其使用 zip_open。他们将能够使用操作系统级别的命令(有自己的风险)来验证文件的完整性,而无需实际解压缩。你也可以参考这个tool 来做同样的事情。

      【讨论】:

      • 1.唯一会下载这些文件的用户是上传它们的用户,所以我不担心用户,我担心系统。 2. 文件不会被执行,只会被压缩/解压和下载。同样在解压缩错误的情况下,我并不关心错误是什么,只要在服务器上没有执行任何操作,也没有溢出 HD 空间或 RAM。
      • 这里我没有谈到用户,我已经讨论了一些使用扫描程序集成来处理 zip 文件和那些 zip 系统端的内容的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多