安全处理远程“;热连接的“;图像


safely handling remote "hotlinked" images

我需要允许站点用户提供远程"热链接"图像。

我意识到这有点危险,所以现在的程序是:

1) 使用PHP pathinfo解析提供的路径,并将路径分解为多个部分(主机、文件名、扩展名),然后对这些部分进行正确转义。

2) 对图像头执行curl请求,如下所述:如何使用PHP检查远程文件是否存在?并验证它是否具有有效的png或jpg mime类型和HTTP200返回代码。

3) 验证文件名和扩展名(来自上面的路径信息)是有效的png或jpg文件(我不接受gif等)

4) 最后,将图像路径数据存储在数据库的多列中(转义数据)

我遗漏了什么吗?危险还在潜伏吗?我在想,也许我也应该在显示器端重新做卷曲功能,以确保图像仍然存在,并且它仍然是一个图像。

谢谢你的建议。

确定它不是驴色情?

说真的,但我唯一能想到的是,如果它是一个向屏幕输出图像的脚本.exe/bin(想想PHP/GD),但同时在后台做其他事情。

例如,CAPTCHA输出一个图像,但只需调用<img src="/img/captcha.php" ... />,就可以同时(在后台)将"正确答案"存储在会话中。

mod_rewrite没有理由不能用<img src="/img/captcha.jpg" ... />调用同一个PHP脚本。HTTP头可以被设置为将MIME类型报告为"image.jpg",响应为200。

我认为你几乎在尽你所能;尽管您可能会使用GD库来读取用户提交的图像,并在系统上创建其副本(作为图像),而不是远程链接。