网站肯定得上让用户上传图片。但是,就是有坏人把可执行代码,伪装成图片上传到服务器上。哪一种方法可靠呢?选来选去,我决定用PHP的finfo_file函数。代码如下:
$imagepic = '1.jpg';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$allowed_mimes = array('image/jpeg','image/png','image/gif');
if(in_array(finfo_file($finfo, $imagepic), $allowed_mimes))
{
//some code here
}
else
{
echo "本站仅支持JPG、PNG、GIF图片上传!";
}
结果,上传网络上找来的图片都没问题,我自己华为手机拍摄的照片,未经任何修改,且字节数、尺寸都没问题,却无法通过验证。
//方法1
$size = getimagesize('1.jpg', $info);
var_dump($size);
输出:array(7) {
[0]=> int(4160)
[1]=> int(3120)
[2]=> int(2)
[3]=> string(26) "width="4160" height="3120""
["bits"]=> int(8)
["channels"]=> int(3)
["mime"]=> string(10) "image/jpeg"
}
//方法2
$imagepic = '1.jpg';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$allowed_mimes = array('image/jpeg','image/png','image/gif');
echo finfo_file($finfo, $imagepic);
输出:image/jpeg
找半天,没发现问题,先记下来。如果有高手路过,请不吝赐教。