1

假设我有一个 Web 应用程序,用户可以在其中在其个人资料中附加一个链接以显示头像(在 img 标签之后显示)。

这安全吗?我认为不是。

检查提供的网址是否为真实图片的最佳方法是什么?还有其他解决方案吗?(现在我不想上传)。

4

3 回答 3

3

我认为您是在为用户提供一种安全的方式来上传带有个人资料的照片。

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

Github 使用它们。

于 2013-07-26T19:05:42.797 回答
2

不,这不安全。这种方法容易受到 XSS(跨站点脚本)和 CSRF(跨站点请求伪造)攻击。img 使用标签构建可能的 XSS 攻击的方法数量很多。看看 OWASP list Malformed img tags只是为了给你一个想法。

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

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

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

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

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

于 2013-07-26T19:50:34.073 回答
0

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

于 2013-07-26T19:05:31.297 回答