如何防止我的页面被其他网站通过iframe嵌套导致点击劫持?

晨羲~ 阅读 40

我在做一个登录页面时,用X-Frame-Options: DENY和JavaScript防嵌套代码:

if (self !== top) { top.location = self.location; }

但测试时发现,攻击者通过修改allow-top-navigation-by-user-activation等策略,还是能绕过我的防御,这是为什么?具体该怎么堵住漏洞?

我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
FSD-素玲
你提到的X-Frame-Options和JavaScript防嵌套手段是常见的防御点击劫持的方式,但它们确实存在一些兼容性和绕过问题,特别是在现代浏览器中引入了新的iframe策略如allow-top-navigation-by-user-activation等特性后。

X-Frame-Options是旧标准,已经被Content-Security-Policy(CSP)中的frame-ancestors策略取代。建议你改用CSP来增强防御,例如:

Content-Security-Policy: frame-ancestors 'none';


如果你需要兼容旧浏览器,可以同时保留X-Frame-Options:

X-Frame-Options: DENY


另外,JavaScript检测方式虽然有用,但也有局限性,特别是在某些浏览器策略允许嵌套但不完全开放top权限的情况下,这种检测可能失效。建议你只将其作为备用手段,而非主防御。

总结一下完整的防御策略:

1. 使用Content-Security-Policy的frame-ancestors设置为'none',防止页面被嵌套;
2. 兼容旧浏览器时设置X-Frame-Options为DENY;
3. 可选添加JavaScript检测作为补充(但不能单独依赖);
4. 注意CSP的Report-Only模式可以先观察影响再全面启用。

这样基本可以堵住大部分iframe嵌套导致的点击劫持漏洞。
点赞 8
2026-02-03 16:06