在阅读 http://dsecrg.com/files/pub/pdf/XSS_in_images_evasion_bypass_(eng).pdf之后,很明显,允许用户上传图像会使您受到XSS攻击。
我找不到任何关于如何筛选上传的图像以进行XSS攻击的PHP示例。
我为CodeIgniter找到了一个,我正在使用它。该功能是xss_clean($file, IS_IMAGE)
的,但只有 1 句话的文档,所以我不知道它是如何工作的,他们论坛上的一条评论说它的误报率高得不合理,所以它不能在生产中使用。
您建议如何防止上传图像中的 XSS 攻击?
只要您保持扩展正确(并且您的用户努力更新他们的浏览器),图像注入就不可能。
例如,如果有人alert('xss');
上传为图像并且您有<img src='that-image.png'>
,它将以 png 的形式发出,并且 JavaScript 不会执行(至少回到 IE7)。 重要的是适当地重命名图像。
如果您有 php> 5.3 和 finfo
PECL 扩展名,您可以使用它来获取文件的 mime 类型,并拥有允许的类型白名单(我会想象 png、jpg、gif)。 如果你使用的是Linux机器,file
也可以帮助你。
在CodeIgniter中,有很多方法可以防止XSS。您可以在获取类似 ->post('data', true) 的值时启用它。第二个参数是 XSS 布尔值。
另外,不要使用 HTML IMG 标记。使用CodeIgniter,它可以清洁,查看并使其更容易显示图像。
就我的两分钱!