如何防止上传假图片?

时间:2012-12-21 13:57:02

标签: php

  

可能重复:
  How to check if an uploaded file is an image without mime type?
  uploading, processing, storing and delivering user-provided files and images

我有图像共享脚本,我做了一半。 用户可以将任何php或cgi文件重命名为.jpg并上传并上传至少

如何防止上传这些假图片?

这是检查文件类型的方法

 $userfile_type = $_FILES['file']['type']; 

当我将php文件重命名为php.jpg时,可以轻松上传。

5 个答案:

答案 0 :(得分:3)

// return mime type ala mimetype extension
$finfo = finfo_open(FILEINFO_MIME_TYPE);
    $type = finfo_file($finfo, $tmp_name);
finfo_close($finfo);

这是服务器,为您提供文件类型,而不是示例中的浏览器。

使用GD你可以做类似的事情     和getimagesize() 如果文件不是图像,则返回零

  

编辑:“getimagesize不是GD库函数。它原生于PHP”感谢Vivek

快乐的编码!!

答案 1 :(得分:1)

使用imagemagick并检查图像信息

答案 2 :(得分:1)

最好的方法之一是使用http://php.net/manual/en/ref.fileinfo.php

答案 3 :(得分:1)

您可以使用getimagesize()检查图像大小。如果函数无法获得大小,则返回False。如果你可以使用GD库并使用imagecreatefromstring()函数来查看它是否是真实的图像,那就更好了。

答案 4 :(得分:1)

exif_imagetype()

php.net的例子:

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

这也是直接来自我链接的php.net页面:

*如果函数exif_imagetype()不可用; 您可以尝试以下解决方法:*

if ( ! function_exists( 'exif_imagetype' ) ) {
    function exif_imagetype ( $filename ) {
        if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) 
        {
            return $type;
        }
    return false;
    }
}