PHP图像上传安全问题

时间:2013-11-17 20:50:07

标签: php security upload

我最近遇到了通过我网站上的表单上传恶意代码的问题。此表单应仅允许上传图像。在做了一些阅读之后,我实施了以下检查。

  1. 在tmp上传文件中使用getimageresize()。如果它返回false,则终止上传过程。

  2. 将上传的图像chmod到644,以便无法执行。

  3. 上传的文件名被更改(前面有一个随机数),因此与用户上传的内容不完全相同。

  4. 我读过在服务器端检查mime类型也是个好主意。我似乎无法在我的服务器上访问finfo_file()或mime_content_type()。

    这些听起来像是为了阻止恶意代码上传和执行而采取的好措施吗?我还有其他措施吗?

2 个答案:

答案 0 :(得分:0)

对于大多数人来说,你的#1似乎已经足够了,而且可能是。

但是,如果你想要额外的安全性(以更多的内存消耗为代价,我担心),你可以将图像保存在一个不可访问的文件夹中(在docroot之外),并编写一个简单的脚本来呈现文件。这需要你将图像加载到内存中(这就是PHP所做的),所以我不会真的建议它,除非你真的害怕有人仍然可以破解你。

正如我所说,你的第一个建议就是应该做的。此外,#3没用,当您在DOM中插入图像时,您将使用随机数公开新名称:)

答案 1 :(得分:0)

基于Eduard Luca所说的东西。我建议的是你

  1. 确保您只接受有效的文件扩展名类型。仅此一项无法拯救您,但如果有人上传.php文件
  2. ,这将变得非常重要
  3. 关闭上传目录的PHP处理。这样你仍然可以直接显示图像,而PHP文件将出现403错误。这可以通过Apache中的站点配置来完成

    <Directory "/path/to/upload">
    php_admin_flag engine off
    AllowOverride None
    DirectoryIndex Off
    RewriteEngine On
    RewriteRule \.php$ - [F,L] 
    </Directory>