Clickjacking点击劫持攻击详解
字数 959 2025-11-07 12:34:03
Clickjacking点击劫持攻击详解
一、攻击描述
Clickjacking(点击劫持)是一种视觉欺骗攻击。攻击者通过覆盖一个透明的恶意页面(如按钮或表单)在合法网页之上,诱导用户点击看似无害的元素(如“播放视频”按钮),实际触发隐藏的恶意操作(如关注社交媒体账号或转账)。这种攻击利用了用户对可见界面的信任,无需技术漏洞即可实现。
二、攻击原理与步骤
-
构建恶意页面:
- 攻击者创建一个包含恶意操作的页面(如“关注某用户”的HTTP请求)。
- 通过CSS将恶意页面设置为透明(
opacity: 0)并嵌入到一个iframe中。
-
诱导用户交互:
- 在恶意页面上层覆盖一个诱饵元素(如“免费抽奖”按钮),通过CSS定位使其与隐藏的恶意按钮重合。
- 用户点击诱饵时,实际触发了iframe内隐藏的恶意操作。
-
利用浏览器安全限制绕过:
- 若目标网站有同源策略保护,攻击者可能结合XSS或开放重定向漏洞,使恶意操作在用户已登录的上下文中执行。
三、攻击示例(伪代码)
<!-- 恶意页面代码 -->
<style>
iframe {
width: 100%;
height: 100%;
opacity: 0; /* 隐藏iframe */
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
button {
position: absolute;
top: 300px;
left: 400px;
z-index: 2; /* 诱饵按钮覆盖在iframe上方 */
}
</style>
<button>点击赢取iPhone!</button>
<iframe src="https://legitimate-site.com/follow?user=attacker"></iframe>
用户点击按钮时,实际触发了iframe内“关注攻击者”的请求。
四、防御措施
-
服务端防御:
- X-Frame-Options响应头:
- 设置为
DENY(禁止任何框架嵌入)或SAMEORIGIN(仅允许同源嵌入)。 - 示例:
X-Frame-Options: DENY。
- 设置为
- Content-Security-Policy(CSP):
- 使用
frame-ancestors指令限制可嵌入页面的源,如Content-Security-Policy: frame-ancestors 'self';。
- 使用
- X-Frame-Options响应头:
-
客户端防御:
- 框架破坏脚本:
- 通过JavaScript检测页面是否被嵌入到iframe中,若是则跳转至顶层页面:
if (top !== self) top.location = self.location; - 注意:此方法可能被浏览器的XSS过滤器或沙箱机制绕过。
- 通过JavaScript检测页面是否被嵌入到iframe中,若是则跳转至顶层页面:
- 框架破坏脚本:
-
增强验证:
- 关键操作(如转账)要求二次认证(如短信验证码),减少单次点击的破坏性。
五、进阶绕过与防护
- 部分浏览器兼容性问题:早期浏览器可能忽略
X-Frame-Options,需结合CSP使用。 - 多层级iframe攻击:攻击者可能嵌套多层iframe规避简单检测,需确保防御覆盖所有场景。
通过结合服务端响应头与客户端验证,可有效遏制点击劫持攻击。