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

标签 php image security image-processing image-uploading

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

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

最佳答案

I'm currently thinking about image re-creation, as I saw that it would be quite a secure method.

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

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

有关旧 Mimetype 扩展的 PHP 手册摘录,现在已被 Fileinfo 取代:

The functions in this module try to guess the content type and encoding of a file by looking for certain magic byte sequences at specific positions within the file. While this is not a bullet proof approach the heuristics used do a very good job.


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

  1. GD (6 个漏洞)
  2. ImageMagick (44 个漏洞)
  3. Gmagick (12 个漏洞)

从比较来看,我认为 GD 最适合,因为它的安全问题数量最少,而且它们已经很老了。其中三个很关键,但 ImagMagick 和 Gmagick 的表现并不好......ImageMagick 似乎有很多错误(至少在安全性方面),所以我选择 Gmagick 作为第二个选项。

关于php - 如何使用 PHP 正确地保护图像上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21855452/

相关文章:

image - 两幅图像的互信息和联合熵-MATLAB

Imagemagick:如何减小具有大静态区域的动画 GIF 的大小?

wpf - WPF用户控件: Image disappears even with 'x:Shared=“False” '

google-chrome - chrome 隐身模式缓存是存储在磁盘还是内存中,是否加密?

ios - 禁用 App Transport Security 和潜在的下层客户端中断

php - 使用 JSON 和 PHP 创建注册 API

php - mysqli_fetch_array 数据放入数组并存储在 php 变量中

php - 如何从 SQL 中选择多条记录并插入到 Session 中

php - 在 Doctrine Symfony 中排序和计数

spring - 将 JWT 存储在数据库中是否有意义?