检查图像是否真的是图像的正确方法


Correct way to check if image is in fact an image

我想知道检查用户提供的图像是否为实际图像的正确方法是什么。

我看到了以下两个例子:

$x = pathinfo('upload.png', PATHINFO_EXTENSION);

结果:png

$x = new finfo(FILEINFO_MIME_TYPE);
$x->file('upload.png');

结果:image/png

后者可以更改扩展,finfo也可以伪造,但难度更大。有关其他检查方法,请参阅文档。正如一位评论者警告的那样,"将有害的可执行代码包装在GIF文件中并不难"。但话虽如此,在这里;我使用的图像检查是什么:

if (!$img = @imagecreatefromgif($uploadedfilename)) {
  trigger_error('Not a GIF image!',E_USER_WARNING);
  // do necessary stuff
}

祝你好运!