php上传文件安全问题?

时间:2012-06-22 09:22:30

标签: php security file-upload upload

  

可能重复:
  Security threats with uploads

我允许用户将图片上传到我们的网站。我是否正确地认为我应该检查文件.jpg / .jpeg / .gif的扩展名以及mime类型以确保没有上传危险文件?

我还应该在上传时调整文件大小以检查它是否是实际的图像文件,而不是重命名的exe或类似文件?例如,如果调整大小失败,那么它不是图像文件。

我应该防范任何其他形式的攻击吗?

编辑:还在图像文件夹中添加.htaccess文件,以便php文件无法执行:

AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
order deny,allow
deny from all

4 个答案:

答案 0 :(得分:2)

识别文件类型的最佳方法是使用file命令行工具或基于相同“魔术字符串”数据库原理的任何其他工具,它知道许多文件的二进制签名并告诉您哪一个是匹配。

这种方法的优点在于它既不受扩展和MIME类型操作的影响,也不会受到用于调整文件大小的图像处理库的潜在攻击(多年来已经存在一些)。

这种方法的缺点是它可能在边界情况下失败(通常不是验证的大问题)并且您需要能够使用这样的工具,这可能在许多共享主机上不可用供应商。从好的方面来说,这里使用这种方法有一个PHP扩展:http://www.php.net/manual/en/intro.fileinfo.php

答案 1 :(得分:2)

调整图像大小听起来是个好主意。不要忘记,使用php代码上传一些真实图像只是为了在任何本地包含漏洞中使用它们。

答案 2 :(得分:-1)

你一定要检查上传文件的mime类型,因为攻击者可以有效地上传一个名为somethingbad.php.jpg的文件,它将像普通的php脚本一样执行。

答案 3 :(得分:-2)

上传文件时没有安全问题。

  1. 只需确保您只存储带有图片扩展名的上传文件
  2. 对文件大小设置上限 - 这样可以保护服务器免受恶意攻击 发送(例如/dev/zero)给你。
  3. 提供这些文件时,请确保MIME类型适用于图像。
  4. 其他帖子不正确

    1. 浏览器不运行PHP代码
    2. 不要相信浏览器中的任何内容。只需从浏览器中获取数据作为建议。即你可以伪造MIME类型。