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

书生シ芸硕 阅读 9

我在做点击劫持防护,按照网上教程加了 top !== self 的判断,但嵌套在 iframe 里还是能正常加载,没被拦截,这是为啥?

我试过在页面最顶部加这段脚本,也确认没被其他逻辑绕过,但就是不生效:

if (top !== self) {
  top.location = self.location;
}
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
Zz伊芃
Zz伊芃 Lv1
跨域的时候访问 top.location 会直接抛 SecurityError 异常,脚本崩了但页面照常加载。

加个 try-catch 就行了:

try {
if (self !== top) {
top.location = self.location;
}
} catch (e) {
document.body.innerHTML = ''; // 跨域无法跳转就直接清空页面
}


不过现在都 2024 年了,直接让后端加 X-Frame-Options: DENY 或者 CSP 的 frame-ancestors 'none' 才是正道,前端防劫持都是补丁方案。
点赞 2
2026-03-01 18:03