使用PHP验证图像上传

时间:2011-07-25 01:14:31

标签: php image-processing imagemagick

我有一个用PHP制作的图像上传程序设置,允许公众提交他们的图像。我无法找到确保文件实际上是图像的方法。我正在检查文件类型,还使用getimagesize(),以及其他检查,但如果我重命名文本文件成为JPG文件,我的验证允许该文件。我怎样才能确保这实际上是一张图片?我不希望我的老板执行任何受感染的文件。

4 个答案:

答案 0 :(得分:0)

检查允许的扩展程序

.gif .jpg .jpeg .png应该被允许

答案 1 :(得分:0)

你可以使用Imagick的identifyImage()命令 如果它返回图像数据的图像,如果它回复错误或没有图像数据,那么它不是图像。如果你没有使用imagemagick编译的php,可以使用这个工具的命令行版本:http://www.imagemagick.org/script/identify.php

答案 2 :(得分:0)

如何使用Exif模块的exit-imagetype()函数?

http://www.php.net/manual/en/function.exif-imagetype.php

<?php
if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
    echo 'The picture is not a gif';
}
?>

答案 3 :(得分:0)

使用gd重现上传的图像。如果没有复制图像,则不是图像!

如果此函数返回false,则它不是有效图像。我还没有使用jpg,png和gif,所以可能有更多的图像类型可以适应这个功能(bmp?)......

function checkFileType($filetype,$tmp_name)
{
    $return_val = false;
    switch($filetype){
        case 'image/jpg':
        case 'image/jpeg':
        case 'image/pjpeg':
            $return_val = @imagecreatefromjpeg($tmp_name);
        break;
        case 'image/gif':
            $return_val = @imagecreatefromgif($tmp_name);
        break;
        case 'image/png':
        case 'image/x-png':
            $return_val = @imagecreatefrompng($tmp_name);
        break;
    }
    return $return_val;
}