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

时间:2013-07-26 19:02:57

标签: php image url symfony

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

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

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

3 个答案:

答案 0 :(得分:3)

我认为您要求用户使用个人资料上传照片的安全方式。

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

Github使用它们。

答案 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()没问题