5

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

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

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

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

4

3 回答 3

2

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

解决方案:

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

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

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

于 2012-08-30T05:49:42.990 回答
1

有几个潜在的问题:

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

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

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

于 2019-11-12T12:10:33.030 回答
0

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

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

于 2019-05-08T15:59:22.723 回答