getimagesize你不能不知道秘密

getimagesize 是PHP处理图片的函数,它的主要作用是获取图片的相关信息,如果你对这个函数不使用不是很清楚,请点击getimagesize

为什么会注意到这个函数?

要做一个检查远程CDN图片是否有效的功能,发现这个 getimagesize 函数,不仅可以打开本地的图片,还可以打开远程的图片。

但在实际使用中,发现 getimagesize 在打开远程图片的效率非常低! 通过 getimagesize 检查图片的方式非常 影响性能。 因为它 需要下载图片再检查,故不符合我们预期。遂改成,通过CURL请求 图片地址,通过检测HTTP返回状态的方式来判断。

function curl($url){

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url );

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch,CURLOPT_HEADER,0);

$output = curl_exec($ch);

if($output === FALSE ){ return false; }

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE) curl_close($ch);

return $http_code === 200;

}

上面这样就简化了流程,起到了优化的作用。移除了我不需要的下载图片和打开图片的过程,只在HTTP协议层就完成检查的功能。

技能提升

功能做完了,就停止了,那就永远就停留在业务层无法提高

getimagesize 这个函数,对于图片处理上面不仅效率低,而且还存在风险

getimagesize 是通过获取图片数据流中头部几个字节来判断图片类型的

这样就为web_shell注入 提供了机会,木马程序只需要在头部插入相关图片类型几个字节,就可以绕过 getimagesize 的检测。

攻击案例:文件上传漏洞-getimagesize检测

原理: getimagesize 函数不是完全可靠的

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » getimagesize你不能不知道秘密

赞 (2) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏