2012-08-10 118 views
5

阅读http://dsecrg.com/files/pub/pdf/XSS_in_images_evasion_bypass_(eng).pdf之后,很明显,允许来自用户的图像上传会将您打开到XSS攻击。使用PHP来防止图像内的XSS攻击

我无法找到任何有关如何为XSS攻击屏幕上传图片的PHP示例。

我找到了一个用于CodeIgniter,我正在使用。功能是xss_clean($file, IS_IMAGE),但它只有一个文档的句子,所以我不知道它是如何工作的,并在他们的论坛上发表评论说它有不合理的高误报率,所以它不适用于生产。

您建议如何防止上载图片中的XSS攻击?

回答

4

只要你保持扩展正确(并且你的用户在努力更新他们的浏览器),图像注入应该是不可能的。例如,如果有人上传alert('xss');作为图像,而你有<img src='that-image.png'>,它将以png形式发出,并且JavaScript不会执行(至少返回到IE7)。重要的是,您可以适当地重命名图像。

如果您的php> 5.3和finfo PECL扩展名,您可以使用它来获取MIME类型的文件,并有一个允许的类型(png,jpg,gif,我会想象)的白名单。如果你在一台Linux机器上,file也可以帮助你。

+0

我个人只是放出所有的应用程序/ octet-stream – 2012-08-10 17:28:50

+0

感谢爆炸,这是我将如何处理它。 正如我在上面链接的文章中所述: “当然,我们可以忽略这个问题,指出它来自应用程序缺陷。但是,网络骗子可以通过图片安装和使用PHP shell本地PHP的存在包括漏洞,在这种情况下,浏览器的功能将不再相关,这一事实证实,如果我们处理用户数据,无论如何都需要过滤。 这令我害怕,但我的服务器已更新,并考虑到它后...我真的不在乎IE 7用户是否被黑客所有。 – Justin 2012-08-11 19:11:47

0

在CodeIgniter中有很多方法来阻止XSS。当获取像 - > post('data',true)的值时,可以启用它。第二个参数是XSS布尔。

此外,请勿使用HTML IMG标记。使用CodeIgniter可以清理,查看并更容易显示图像。

只是我的两分钱!

+0

我不确定这是否实际上会过滤图像(也许只是文件名?),除非您特别使用xss_clean($ file,TRUE)。在这里看到IS_IMAGE:http://codeigniter.com/user_guide/libraries/security.html – Justin 2012-08-11 19:13:44

+0

是的,Codeigniter [HTML Helper]中的'img()'函数(http://ellislab.com/codeigniter/user-guide /helpers/html_helper.html#img)**根本没有安全检查**,它只是构造一个''标签。我最喜欢的方法是获取图像的MIME类型,只允许你知道的类型是安全的... – 2013-05-01 14:53:09