情况:我们有一个小部件,我们希望允许在受信任的站点上进行iframed。为了减轻潜在的Clickjacking攻击,我们希望在窗口小部件加载域的白名单时检查引用者。没有匹配=小部件被禁用。
我知道使用Flash可以使用任何Referer标头发送任意HTTP请求。 document.referrer同样容易受到攻击吗?
注意:我知道用户可以更改设置,其他情况可以使document.referrer为空。那样就好。如果嵌入它的网站不受信任,那么窗口小部件始终工作并不重要。
编辑:X-Frame-Options此时不起作用,因为在Chrome或Safari中未实现ALLOW-FROM。我需要能够支持第三方域名。
答案 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字符串中弄清楚它是什么域。你必须小心如何做到这一点。