可以伪造document.referrer吗?

时间:2014-12-18 17:23:25

标签: javascript referrer

情况:我们有一个小部件,我们希望允许在受信任的站点上进行iframed。为了减轻潜在的Clickjacking攻击,我们希望在窗口小部件加载域的白名单时检查引用者。没有匹配=小部件被禁用。

我知道使用Flash可以使用任何Referer标头发送任意HTTP请求。 document.referrer同样容易受到攻击吗?

注意:我知道用户可以更改设置,其他情况可以使document.referrer为空。那样就好。如果嵌入它的网站不受信任,那么窗口小部件始终工作并不重要。

编辑:X-Frame-Options此时不起作用,因为在Chrome或Safari中未实现ALLOW-FROM。我需要能够支持第三方域名。

2 个答案:

答案 0 :(得分:2)

是。你可以这样做:

document.referrer = "http://foobar.com";

如果您只想允许您的站点在受信任的站点上进行设置,请使用X-Frame-Options HTTP响应标头。

MDN Developer article for X-Frame-Options

编辑:如果您需要在不完全支持X-Frame-Options的浏览器上进行此工作,那么您需要更复杂的内容,即“外部”站点与托管iframed站点的服务器通信以请求单个-use token绑定到客户端IP地址,并使用它来批准/拒绝访问。

答案 1 :(得分:1)

众所周知,您可以清除Referer标头和document.referrer,例如,来自数据URI。只要您不允许undefined document.referrer,就不会给攻击者任何意外访问权。

您还在问题中声明Flash可以使用攻击者控制的Referer标头发出请求。但是,在这种情况下,他们无法将响应呈现为服务器来源的文档。他们不能用它做任何点击劫持攻击。也许是CSRF。

如果请求是由iframe发送的,那么浏览器将发送正确的推荐人。


document.referrer的一个小问题是你必须从URL字符串中弄清楚它是什么域。你必须小心如何做到这一点。