如何防止攻击者绕过我的Top窗口检测防御?
我在页面加了if (top !== self) top.location=self;想防点击劫持,但测试时发现攻击者用透明iframe叠加后检测失效了。明明设置了X-Frame-Options: SAMEORIGIN,为什么还能被绕过?
尝试过这个检测函数:
if (window.top !== window.self) {
alert('被嵌入了!');
window.top.location.href = window.location.href;
}
但攻击者用下面的代码居然能绕过去:
明明设置了HTTP头X-Frame-Options: SAMEORIGIN,为什么还能被跨域嵌入?是不是应该用CSP来增强防护?
这会阻止页面被任何非同源页面嵌套,连 JS 都不用写,一劳永逸。
建议你直接上CSP(Content-Security-Policy),这是目前最靠谱的防御方式。具体配置如下:
或者在HTTP头里加:
这样可以彻底禁止其他域名嵌套你的页面。如果还需要兼容子域名,可以用下面这个:
拿去改改,基本就能防住这种攻击了。当然,JS检测还是可以保留作为双重防护,但主要还是靠CSP。