0

可能重复:
上传的安全威胁

我允许用户将图像上传到我们的网站。我是否认为我应该检查文件 .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

4 回答 4

2

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

这种方法的优点是它不受扩展名和 MIME 类型操作的影响,也不受用于调整文件大小的图像操作库的潜在攻击(其中一些多年来一直存在)。

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

于 2012-06-22T09:33:26.083 回答
2

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

于 2012-06-22T09:56:39.027 回答
-1

您绝对应该检查上传文件的 mime 类型,因为攻击者可以有效地上传一个名为 somethingbad.php.jpg 的文件,并且它将像普通的 php 脚本一样执行。

于 2012-06-22T09:26:12.047 回答
-2

上传文件没有安全问题。

  1. 只需确保您只存储带有图像扩展名的上传文件
  2. 对文件大小设置上限 - 这将保护服务器免受恶意人员发送(例如/dev/zero)给您的影响。
  3. 提供这些文件时,请确保 MIME 类型适用于图像。

其他帖子不正确

  1. 浏览器不运行 PHP 代码
  2. 不要相信来自浏览器的任何东西。只需从浏览器中获取数据作为建议。即你可以伪造 MIME 类型。
于 2012-06-22T10:20:32.800 回答