如何使用PHP正确保护图像上传?

时间:2014-02-18 13:33:14

标签: php image security image-processing image-uploading

好吧,所以我看过很多关于如何保护图片上传表格的讨论,但是没有人告诉我,该怎么做才能100%防止通过我的应用程序上传恶意代码。

我正在考虑图像重新创建,因为我看到它将是一种非常安全的方法。可以?还有哪些其他选择?还有哪些扩展是这些方法的首选?

2 个答案:

答案 0 :(得分:2)

  

我正在考虑图像重新创建,就像我看到它一样   这将是一个非常安全的方法。

除非您用于重新创建的库不易受攻击:P。但严重的是,我认为这不是一个坏主意,在大多数情况下,它会提高安全性。

为了提高安全性,您还可以使用Fileinfo functions(以前版本的PHP中的mime_content_type())检测内容类型。

关于较旧的Mimetype扩展的摘录表格PHP手册,现在由Fileinfo替换:

  

此模块中的函数尝试猜测内容类型和   通过查找某些魔术字节序列来编码文件   文件中的特定位置。虽然这不是防弹   接近使用的启发式方法做得非常好。


至于问题,哪个PHP扩展最适合安全图像重新创建...我已经检查了CVE details网站。我认为适用的三重奏是那些扩展:

  1. GD(6个漏洞)
  2. ImageMagick(44个漏洞)
  3. Gmagick(12个漏洞)
  4. 从比较中我认为GD最适合,因为它的安全问题最少,而且它们已经很老了。其中三个是关键,但ImagMagick和Gmagick表现不佳...... ImageMagick似乎非常错(至少在安全方面),所以我选择Gmagick作为第二选择。

答案 1 :(得分:1)

正如this文档所述,下面是您需要的示例代码段。

   $finfo = new finfo(FILEINFO_MIME_TYPE);
   $fileContents = file_get_contents($_FILES['some_name']['tmp_name']);
   $mimeType = $finfo->buffer($fileContents);