0

可能重复:
如何检查上传的文件是否是没有 mime 类型的图像?
上传、处理、存储和交付用户提供的文件和图像

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

如何防止上传此类假图片?

这是我检查文件类型的方法

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

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

4

5 回答 5

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

快乐编码!

于 2012-12-21T14:02:48.823 回答
1

使用 imagemagic 并检查图像信息

于 2012-12-21T14:00:36.307 回答
1

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

于 2012-12-21T14:02:48.510 回答
1

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

于 2012-12-21T14:05:28.660 回答
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;
    }
}
于 2012-12-21T14:07:02.947 回答