关于某fecmaller提的关于后台图片可以上传任意图片文件的问题
github issues: https://github.com/fecshop/yii2_fecshop/issues/77
本人进行了测试,后台文件上传
1.上传非图片后缀的文件,譬如 11.txt, 上传失败
2.将11.txt改成 11.png,上传失败
3.将图片333.png改成 333.php,上传成功
fecmall对图片的验证,并不是对文件后缀进行的验证,而是对图片文件的验证,这里并不是
你说的任意文件,譬如
1和2,就上传失败,
fecmall 图片验证代码
1.验证类型:https://github.com/fecshop/yii2_fecshop/blob/b15d7ed0f9ede3a75cbe971f10688567c5a95e9b/services/Image.php#L37
2.验证函数代码:
https://github.com/fecshop/yii2_fecshop/blob/b15d7ed0f9ede3a75cbe971f10688567c5a95e9b/services/Image.php#L57
通过php函数进行图片文件验证,并不是验证后缀,而是验证图片文件二进制内容,即使你将一个图片的后缀改成其他的后缀,上传到后台并没有问题,他仍是一个图片,并不是你说的任意文件
,你将一个11.txt文件改成11.php,并不能上传成功。
public function isAllowImgType($file)
{
$img = getimagesize($file);
$imgType = $img['mime'];
if (!in_array($imgType, $this->allowImgType)) {
return false;
}
return true;
}
更新
对php的函数 php getimagesize, 进行了查询,这个函数
getimagesize 函数不是完全可靠的
参考资料:https://segmentfault.com/a/1190000003911296
因此您说的这个漏洞是存在的