点击劫持防护中 top 检测为啥失效了?

❤明明 阅读 3

我按照网上教程加了点击劫持的 top 检测逻辑,但嵌入 iframe 后页面还是能正常加载,没被跳出去。是我写法有问题吗?

试过在 Chrome 里用本地文件打开测试,也试过部署到服务器上,结果都一样。控制台也没报错,就是防护没生效。

<script>
if (window.top !== window.self) {
  window.top.location = window.self.location;
}
</script>
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
司马传禄
问题应该出在浏览器的安全策略上。现代浏览器对跨域访问做了很多限制,特别是涉及到 frame 和 window 之间的操作。

你这段代码的逻辑没问题,但可能被浏览器拦截了。试下加个 X-Frame-Options 头信息来配合使用。服务器端配置这个头能从根本上防止点击劫持。

比如在 Apache 里可以这样设置:

Header always append X-Frame-Options SAMEORIGIN


或者直接在页面头部加上:

<meta http-equiv="X-Frame-Options" content="sameorigin">


记得清除浏览器缓存再测试。有时候这些安全相关的设置需要刷新一下才能生效。开发的时候遇到这种问题最头疼了,不过组合多种防护手段总是没错的。
点赞
2026-03-30 09:04