允许通过外部url进行图像配置文件的最佳安全方式


Best security way to allow image profile by external url

假设我有一个web应用程序,用户可以在其配置文件中附加一个链接来显示化身(后面用img标记显示)。

这是安全的吗?我认为不是。

检查提供的url是否为真实图像的最佳方法是什么?还有其他解决方案吗?(目前我不想上传)。

我认为你在为用户提供一种安全的上传照片和个人资料的方式。

如果你不想处理它,请查看https://gravatar.com/在那里他们管理用户的个人资料图片。

Github使用它们。

不,它不安全。此方法易受XSS(跨站点脚本)和CSRF(跨站点请求伪造)攻击。使用img标签构建可能的XSS攻击的方法数量巨大。看看OWASP列表格式不正确的img标记,给你一个想法。

你可以说逃跑对你有帮助。是的,但单独逃跑并不能保证XSS的预防。以下是OWASP(开放式Web应用程序安全项目)的总体建议:

您必须对HTML文档中放入不可信数据的部分使用转义语法

另外,检查哪些数据是允许的(白名单),而不是检查无休止的不允许数据列表。这是OWASP的XSS预防备忘单。OWASP还发布了一个库ESAPI,用于右上下文中的转义。

但假设您已经完成了XSS。使用CSRF,恶意用户可以在您的img标签中构造合法请求,以更新某些用户的配置文件。假设这样的用户来看这个个人资料,突然他/她的个人资料更新了!在这种情况下,您可能需要生成与用户会话相关的"质询"/验证令牌,该令牌将附加到每个用户的请求中。

我的建议是要么使用像gravatar这样的外部可信服务,要么实现上传。如果您确实想使用用户的输入,那么我强烈建议您熟悉本案例的ESAPI库以及OWASP XSS和CSRF预防备忘单。

如果使用urlEncode()+urlDecode(),没有问题