在php上保护上传表单

时间:2011-03-25 18:53:32

标签: php security file-upload

我正在为我的网站制作一项功能,以便用户可以上传文件(任何类型)。 为了保护上传表格,我制作了一份不接受的文件类型的黑名单。但为了确保对我的服务器的保护(在以任何方式上传恶意脚本的情况下)我想 tar上传的文件(使用tar类),以便它们存储为.tar压缩文件。 因此,如果用户想要下载它,那么他将收到一个.tar文件。

我的问题是,这足够安全吗? (因为那时无法执行文件)。

[我有这个预约,因为我可以看到tar类的代码,“fread()”]

谢谢!

4 个答案:

答案 0 :(得分:2)

两点,在这里:

  • 使用黑名单是一个坏主意:你永远不会想到所有可能的邪恶文件类型。
  • 不要将上传的文件存储到服务器的公共目录中:
    • 将这些文件存储到DocumentRoot以外的目录,而不是Apache
    • 并使用PHP脚本(即使Apaches无法通过HTTP提供文件,PHP也可以读取它们)将这些文件内容发送给想要下载它们的用户。
    • 这将确保永远不会执行这些上传的文件。


当然,请确保发送文件内容的PHP脚本不允许任何人下载服务器上的任何可能文件...

答案 1 :(得分:0)

您可以将文件上传到非Web访问位置(在您的webroot下),然后使用下载脚本下载文件。

答案 2 :(得分:0)

在我看来,处理上传文件的最佳方法是将它们放在一个无法通过HTTP访问的文件夹中。然后,当请求文件时,使用PHP文件发送然后下载标题,使用readfile()将文件发送给用户。这样,文件永远不会被执行。

答案 3 :(得分:0)

这可能有用,假设您是下载文件的用户可以解压缩它们(大多数非UNIX系统只有zip,我可以选择下载这两种格式)。

另外,我认为最好创建一个允许文件列表与禁止文件。很容易忘记禁止特定类型;而您可能会更好地了解用户可以上传的内容

不要阻止/允许扩展名上的文件。确保使用服务器将文件标识为的mime类型。这样他们很难伪造它。

另外,将文件存储在非Web可访问目录中并通过脚本下载。

即使它是一个糟糕的文件,如果他们无法直接访问它,他们将无法利用它。

保存文件时,请确保使用以下功能: http://php.net/manual/en/function.is-uploaded-file.php http://php.net/manual/en/function.move-uploaded-file.php