点击劫持把目标页面嵌入透明 iframe,叠放在诱骗页面上,让用户以为在点击无害按钮,实际上操作了另一个网站的功能,包括转账确认、隐私设置修改等。2008 年被正式命名,此后促生了 X-Frame-Options 和 CSP frame-ancestors 两种防御机制。

| 命名时间 | 2008 年,Hansen & Grossman |
| 推荐防御 | CSP frame-ancestors 'none' 或 SAMEORIGIN |
| 历史案例 | Adobe Flash 隐私设置点击劫持(2008) |
2008 年,安全研究员 Robert Hansen 和 Jeremiah Grossman 在 OWASP AppSec 会议上演示了点击劫持。基本手法:用 CSS 把目标页面的 iframe 设为 opacity: 0,与诱骗页面的元素像素级对齐,用户看到的是「点击这里领取礼品」,实际点击的是 Facebook 的「赞」或网银的「转账确认」按钮。
变种包括:光标劫持(用 CSS cursor 属性显示假光标,让用户点偏位);拖拽劫持(诱导用户把隐藏 iframe 中的内容拖拽到攻击者控制的区域,适用于不依赖点击的 HTML5 拖拽 API);触摸劫持(移动端用触摸事件替代点击,效果相同)。[1]
X-Frame-Options 是最早的应对方案(2009 年 IE8 率先支持):值设为 DENY 时完全禁止被嵌入;SAMEORIGIN 只允许同源页面嵌入;ALLOW-FROM 指定白名单(但现代浏览器已不支持该值)。
更现代的方式是 CSP 的 frame-ancestors 指令:Content-Security-Policy: frame-ancestors 'none' 等效于 DENY,且语法更灵活,支持精确域名白名单。两者可同时部署,因为旧浏览器不理解 CSP。
纯前端的「framebusting」脚本(检测 top !== self 然后跳转)已被证明可被 sandbox 属性绕过,不应作为主要防御手段。

| 命名时间 | 2008 年,Hansen & Grossman |
| 推荐防御 | CSP frame-ancestors 'none' 或 SAMEORIGIN |
| 历史案例 | Adobe Flash 隐私设置点击劫持(2008) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧