用于单点登录的HTTP Referer

时间:2012-03-29 22:12:04

标签: security http-referer

作为与合作伙伴合作的项目的一部分,我们需要在我们的应用上提供单点登录服务。基本上,人们将通过我们合作伙伴的网站登录,然后他们被重定向到我们的网站。重定向的请求将在HTTP标头字段中包含用户的数据。

这是“iffy”的地方。验证此请求是否有效的过程取决于HTTP Referer字段的值。我们的合作伙伴告诉我们检查此字段以查看来源是合法的。

现在我知道(并且我很高兴被证明是错误的)这个字段很容易伪造,并且由于没有给我们任何其他身份验证方法,恶意用户可以很容易地构造错误的HTTP请求和获取访问我们的网络应用程序。

我首先是程序员,并且对HTTP的复杂性知之甚少。 我的担忧是真的吗?使用SSL(不知何故)会使这个问题无效吗?

3 个答案:

答案 0 :(得分:2)

请记住,第一条规则永远不信任客户输入。与任何其他客户端输入一样,Referer标头对于伪造来说是微不足道的。 SSL对您没有任何帮助,因为您仍然依赖客户端输入。另请注意,当https页面引用时,浏览器SHOULD NOT会将Referer发送到http页面。

此外,考虑到许多注重隐私的人和代理(个人可能无法控制)可能会从他们的请求中删除Referer标题,从而破坏您的计划。

要正确执行此操作,您需要使用类似OAuth或OpenID的内容,其中协议的设计是安全的。

答案 1 :(得分:2)

HTTP Referrer标头不可靠:根据使用的浏览器,可能无法发送。

Does http-equiv="refresh" keep referrer info and metadata?

答案 2 :(得分:1)

是的 - 这是可以伪造的。

否 - 客户端可以像(假)HTTP请求一样轻松发送(假)HTTPS请求。唯一的区别是连接是加密的。它没有说明传输的数据。

话虽如此,可以使用另一个预防措施。但是, security 不应该依赖它。

我会看Microsoft Federation - 它可能有点过分,但它显示了一种安全实施SSO的方法。