我有图像共享脚本,我做了一半。用户可以将任何php或cgi文件重命名为.jpg并上传,上传成功
如何防止上传此类假图片?
这是我检查文件类型的方法
$userfile_type = $_FILES['file']['type'];
当我将 php 文件重命名为 php.jpg 时,它可以轻松上传。
我有图像共享脚本,我做了一半。用户可以将任何php或cgi文件重命名为.jpg并上传,上传成功
如何防止上传此类假图片?
这是我检查文件类型的方法
$userfile_type = $_FILES['file']['type'];
当我将 php 文件重命名为 php.jpg 时,它可以轻松上传。
// 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
快乐编码!
使用 imagemagic 并检查图像信息
您可以使用 getimagesize() 检查图像大小。如果函数无法获取大小,则返回 False。如果您可以使用 GD 库并使用 imagecreatefromstring() 函数来查看它是否是真实图像,那就更好了。
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;
}
}