
什么是点击劫持?
点击劫持(Clickjacking),又称“界面劫持”或“UI 欺骗”,是一种Web安全攻击方式,攻击者诱导用户在无意间点击了被隐藏或伪装的页面元素,从而达成攻击目的。通常表现为:攻击者在自己的网站页面中通过 iframe、透明遮罩等技术“嵌套”目标网站,并精心布局和视觉伪装,使用户误以为点击的是正常按钮,实则是在操作受害网站。
点击劫持的危害
- 非法操作账户
- 比如在用户已登录银行、网购等网站的情况下,点击攻击页面上的“按钮”实际上是在受害网站上进行资金转账、积分兑换等操作。
- 泄露敏感信息
- 用户以为在输入普通信息,实则被提交到攻击者控制页面或被利用发起操作。
- 社会工程与钓鱼
- 利用伪装页面诱骗用户完成攻击者期望的操作(如点赞、关注、转发、授权等)。
- 触发恶意操作
- 启用设备摄像头、麦克风、发送邮件、变更设置等高危操作。
点击劫持的典型攻击原理
- iframe嵌套法
攻击者在自己的网站中通过
<iframe src="受害网站URL"> 引入受害页面,并通过CSS控制iframe的位置和透明度。
- 诱导用户点击
攻击者将吸引用户点击的内容(如抽奖按钮、图片等)覆盖在iframe之上,或者让iframe与诱导元素重叠对齐,使用户实际点击了受害页面的按钮。
示例攻击代码
<!-- 诱导用户点击“领取红包”按钮 -->
<button style="position:absolute;z-index:2;">点击领取红包</button>
<!-- 被透明的iframe覆盖,实际点击是iframe中的内容 -->
<iframe src="https://bank.com/transfer" style="opacity:0;position:absolute;top:0;left:0;width:200px;height:50px;z-index:3;"></iframe>
用户以为在点击自己的按钮,实则是在目标网站触发了操作。
防御点击劫持的措施
-
设置防护响应头
-
X-Frame-Options
通过设置以下 HTTP 响应头,防止页面被嵌入到 iframe 中:
X-Frame-Options: DENY
或
X-Frame-Options: SAMEORIGIN
现代浏览器会阻止不符合条件的嵌套。
-
Content-Security-Policy (CSP) 的 frame-ancestors
更灵活地指定允许哪些来源嵌入页面:
Content-Security-Policy: frame-ancestors 'self'
-
JavaScript 跳窗检测
用 script 检测页面是否被嵌套在 iframe 内,如果是则跳转到顶级窗口:
if (window.top !== window.self) {
window.top.location = window.self.location;
}
-
关键操作确认
对于敏感操作(如资金转账、删除等)增加二次确认或验证码校验,防止无意识点击直接生效。
-
最小化第三方嵌套需求
除特殊用途外,生产环境页面应避免被嵌入 iframe、object、embed 等元素。
总结
点击劫持攻击隐蔽性强、危害大,能够在用户毫不知情的情况下发起高危操作。开发者应充分利用 HTTP 安全响应头、Javascript 检测、操作确认等多重防护措施,防止网站被用于点击劫持,保障用户账户和信息安全。