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