点击劫持攻击

概述

点击劫持攻击(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/...
相关推荐
轻口味13 分钟前
【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
前端·华为·harmonyos
alikami16 分钟前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
吃杠碰小鸡1 小时前
lodash常用函数
前端·javascript
emoji1111111 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼1 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_748250031 小时前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O1 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
m0_748235951 小时前
web复习(三)
前端
AiFlutter1 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter
麦兜*1 小时前
轮播图带详情插件、uniApp插件
前端·javascript·uni-app·vue