1

我使用下面的代码来测试上传的文件是否确实是图像。(下面的代码与使用 ImageMagick 时在 php 网站中找到的 OOP 样式不同,因为我在共享服务器上,这是我的主机在使用 ImageMagick 时提供的说明,实际脚本将涉及重新路由用户、取消链接或删除上传的文件以及更多所以请不要批评下面的代码,我只是想详述使用IMAGICK IDENTIFY作为图像验证工具的概念。)

<?php
if(!exec('/usr/bin/identify /home/user/public_html/joteco_test_folder/thisisanimage.jpg'))
{
echo "NOT AN IMAGE";
}
else
{
echo exec('/path/here/identify /path/here/thisisanimage.jpg');
}
?>

我在上面的代码上尝试了以下内容:

  1. 用photoshop cs6制作的.jpg。(它通过并回显了以下细节“810x203 810x203+0+0 8-bit DirectClass 32.4KB 0.000u 0:00.000”)

  2. .txt 文件。(它失败并回显“不是图像”)

  3. 使用记事本制作的 .jpg 文件,其中包含写有“我是图像”的文本字符。(它失败并回显“不是图像”)

(在我看来,我认为这是成功的,但我知道黑客所做的比我在测试#3 中所做的更多。)

所以!您认为这足以作为安全检查来验证上传的文件是否确实是图像吗?或者 ImageMagick 中是否有其他工具可以用于此目的?你的意见?

(请不要建议或提及( MIME | EXTENSION | GETIMAGESIZE ),因为它在 stackoverflow 中被反复提及为验证上传文件的无用方法。谢谢)

4

1 回答 1

4

这应该可以帮助你。

$im = @imagecreatefromjpeg($imgname);
if(!$im)
    {
    return false;
    }
else
    {
            imagedestroy($im);
            return true;
    }

除了检查它是否是图像之外,它还会为不完整(部分上传)的图像返回 false

于 2013-03-21T04:02:47.733 回答