2011-04-05 77 views
2

我允许PDF文件上传到我的网站(PHP)。允许ZIP文件上传时需要考虑什么难点/问题?

我想提供允许在目录中包含PDF文件的.zip文件的功能,因此用户可以更轻松地压缩目录并上传一个文件,而不是单独上传多个zip文件。

对于那些向您的(PHP)网站提供.zip文件上载功能的用户,您遇到的技术,安全和其他问题有哪些?

回答

0

AFAIK,php可以非常有效地处理zip文件。我能想到的困难/问题是,在访问我们需要首先提取压缩文件的文件时,然后检索实际需要的文件。由于这个原因,提取zip文件可能会消耗更多的服务器时间,具体取决于文件本身的大小。

在上传过程中,我不认为在zip类型上特别强调了任何困难或问题。

+0

要添加我的两分钱,如果您可以使用ClamAV,那么有一些[第三方库](http://www.clamav.net/lang/en/download/third-party-tools/3rdparty-library/ )(也适用于PHP),如果你想病毒检查上传的文件。 – fabrik 2011-04-05 07:19:53

1

假设.zip最终得到解压缩,您将不得不确保它们解压缩到的目录无法被客户端的浏览器访问(使用.htaccess或将它放在Web根目录之外),甚至在我仍然会监视解压后的.zip的内容,以确保它们不包含任何可能会有害的内容(php或由服务器运行的其他文件,html spoofs)。

另一个问题是我想在php.ini中设置upload_max_filesize,你可以确保它可以设置得足够大,以适应你的目的,然后再开始编码。

编辑:也看了sarnold's answer;)

+1

不要忘记拉链炸弹。他们非常棘手。它们非常小巧,但是如果你尝试提取它们,那么会让你的服务器受到打击,因为需要提取一些TB。所以实际上你需要进行一些防病毒检查,如果你曾经提取过它们。如果你只救他们,什么都不应该发生。 – ITroubs 2011-04-05 07:33:34

1

Be careful how you unpack the zip,你会发现自己远远消耗更多的资源比你预期的。在解包之前,或许一些setrlimit(2)资源限制是明智的。

unzip(1)实用程序有几个很好的内置安全功能; -^命令行选项关闭控制字符过滤,所以请确保您不要触及此:)和-:命令行选项允许../../../../etc/passwd这样的愚蠢路径名。确保你的版本至少为5.50,这样默认情况下这些愚蠢的路径名是被禁止的。 (并且不要使用那个命令行选项,我提到这些选项只是为了让你更容易找到它们的文档:)

如果你使用API​​,确保它有选项来防止这两种愚蠢文件名。

+0

确保您的Web服务器用户是非特权用户和沙箱用户,这将大大避免这种问题。 – Nick 2011-04-05 07:52:53

相关问题