【问题标题】:Is ImageMagick identify enough to verify that the image is indeed an imageImageMagick 是否足以验证图像确实是图像
【发布时间】:2013-03-10 11:20:50
【问题描述】:

我使用下面的代码来测试上传的文件是否确实是图像。 (下面的代码与使用 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 文件。 (失败并回显“NOT AN IMAGE”)

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这应该可以帮助你。

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

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

    【讨论】:

    • 是的,但它惊人的快速和准确。我每天两次处理超过 5000 张图像。
    • 只要能胜任。谢谢@suyash!
    • imagedestroy 永远无法到达。
    • 很抱歉,但它很容易理解。
    • @joespina 将要返回的值存储在一个变量中,销毁图像,然后返回存储的值。
    猜你喜欢
    • 2013-07-19
    • 2016-07-20
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2012-03-21
    • 2021-06-28
    相关资源
    最近更新 更多