假设我有一个网络应用程序,用户可以在其个人资料中附加链接以显示头像(使用img标签后显示)。
这样安全吗?我认为不是。
检查提供的网址是否为真实图片的最佳方法是什么?还有其他解决方案吗? (现在我不想上传)。
答案 0 :(得分:3)
答案 1 :(得分:2)
不,这不安全。此方法易受XSS(跨站点脚本)和CSRF(跨站点请求伪造)攻击。使用img
标记构建可能的XSS攻击的方法数量巨大。看看OWASP列表Malformed img tags只是为了给你一个想法。
你可以说逃避可以帮助你。是的,但单独逃避并不能保证XSS的预防。以下是OWASP(开放式Web应用程序安全项目)的一般建议:
您必须使用转义语法来处理您将不受信任的数据放入HTML文档的部分
另外检查允许的数据(白名单),而不是检查不允许的数据的无限列表。
这是OWASP的XSS prevention cheat sheet。
OWASP还发布了一个库ESAPI
,用于在正确的上下文中进行转义。
但是,让我们说你完成了XSS。使用CSRF,恶意用户可以在img
标记内构建合法请求,以更新某些用户的个人资料。让我们说这样的用户来看看这个配置文件,突然间他/她的个人资料更新了!在这种情况下,您可能需要生成与用户会话相关联的“质询”/验证令牌,该令牌将附加到每个用户的请求中。
我的建议是使用外部可信服务(如gravatar)或实施上传。 如果您确实想要使用用户的输入,那么我强烈建议您熟悉本案例的ESAPI库以及OWASP XSS和CSRF预防备忘单。
答案 2 :(得分:0)
如果你使用urlEncode()+ urlDecode()没问题