Clickjacking点击劫持攻击详解
字数 959 2025-11-07 12:34:03

Clickjacking点击劫持攻击详解

一、攻击描述
Clickjacking(点击劫持)是一种视觉欺骗攻击。攻击者通过覆盖一个透明的恶意页面(如按钮或表单)在合法网页之上,诱导用户点击看似无害的元素(如“播放视频”按钮),实际触发隐藏的恶意操作(如关注社交媒体账号或转账)。这种攻击利用了用户对可见界面的信任,无需技术漏洞即可实现。

二、攻击原理与步骤

  1. 构建恶意页面

    • 攻击者创建一个包含恶意操作的页面(如“关注某用户”的HTTP请求)。
    • 通过CSS将恶意页面设置为透明(opacity: 0)并嵌入到一个iframe中。
  2. 诱导用户交互

    • 在恶意页面上层覆盖一个诱饵元素(如“免费抽奖”按钮),通过CSS定位使其与隐藏的恶意按钮重合。
    • 用户点击诱饵时,实际触发了iframe内隐藏的恶意操作。
  3. 利用浏览器安全限制绕过

    • 若目标网站有同源策略保护,攻击者可能结合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内“关注攻击者”的请求。

四、防御措施

  1. 服务端防御

    • X-Frame-Options响应头
      • 设置为 DENY(禁止任何框架嵌入)或 SAMEORIGIN(仅允许同源嵌入)。
      • 示例:X-Frame-Options: DENY
    • Content-Security-Policy(CSP)
      • 使用 frame-ancestors 指令限制可嵌入页面的源,如 Content-Security-Policy: frame-ancestors 'self';
  2. 客户端防御

    • 框架破坏脚本
      • 通过JavaScript检测页面是否被嵌入到iframe中,若是则跳转至顶层页面:
        if (top !== self) top.location = self.location;
        
      • 注意:此方法可能被浏览器的XSS过滤器或沙箱机制绕过。
  3. 增强验证

    • 关键操作(如转账)要求二次认证(如短信验证码),减少单次点击的破坏性。

五、进阶绕过与防护

  • 部分浏览器兼容性问题:早期浏览器可能忽略 X-Frame-Options,需结合CSP使用。
  • 多层级iframe攻击:攻击者可能嵌套多层iframe规避简单检测,需确保防御覆盖所有场景。

通过结合服务端响应头与客户端验证,可有效遏制点击劫持攻击。

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