网站确定得上让用户上传图片。可是,就是有坏人把可执行代码,假装成图片上传到服务器上。哪种方法可靠呢?选来选去,我决定用PHP的finfo_file函数。代码以下:php
$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
找半天,没发现问题,先记下来。若是有高手路过,请不吝赐教。网络