我正在尝试实现一个用户系统(php,apache),用户可以在其中上传多个文件并下载它们的压缩版本。(或上传压缩文件并下载未压缩文件)。
问题:压缩/解压缩这些未知文件是否有风险?换句话说,unix/php zip/unzip 操作是否仅将文件视为文本,还是可以执行某些操作?
这个问题与所有压缩方法有关,zip 只是一个例子。
编辑: @Alex Brown 和 @Parallelis 写了 2 个风险,所以显然它不安全。任何人都可以发布关于如何实现安全压缩/解压缩未知文件的简短说明?
我正在尝试实现一个用户系统(php,apache),用户可以在其中上传多个文件并下载它们的压缩版本。(或上传压缩文件并下载未压缩文件)。
问题:压缩/解压缩这些未知文件是否有风险?换句话说,unix/php zip/unzip 操作是否仅将文件视为文本,还是可以执行某些操作?
这个问题与所有压缩方法有关,zip 只是一个例子。
编辑: @Alex Brown 和 @Parallelis 写了 2 个风险,所以显然它不安全。任何人都可以发布关于如何实现安全压缩/解压缩未知文件的简短说明?
因为这对我来说似乎是合理的。由于某些问题,您不能这样做,如果这些文件是引导脚本怎么办?(有关另外 2 个问题,请参阅 Alex 和 Parallelis 的评论)。
解决方案:
有几个潜在的问题:
Zip 炸弹 - 这通常不再是什么大问题,因为大多数解压工具/语言会阻止嵌套的解压级别。
相对路径:在我看来,这是您最关心的问题 - zip 已解压缩,但它包含文件:../../../../../../vendor/autoload.php
例如.. 这会覆盖您的 autoload.php 文件,并在有人查看您的网站时执行。游戏结束。
无数个inode。一个 zip 文件可能包含数百万个 0 字节的文件,会用完系统上所有可用的 inode。这将阻止硬盘在该分区上创建新文件。这可能是中等坏的。
您还应该知道 zip 档案可能包含符号链接。如果用户在解压缩后可以读取文件,则可以读取文件系统上的任意文件。
zip 实用程序具有用于存储符号链接的 --symlinks 选项。