主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
JavaScript

JavaScript 基础

JavaScript 主页
JavaScript 概述
JavaScript 特性
JavaScript 启用
JavaScript 展示位置
JavaScript 语法
JavaScript hello_world
JavaScript console.log()
JavaScript 注释
JavaScript 变量
JavaScript let 语句
JavaScript 常量
JavaScript 数据类型
JavaScript 类型转换
JavaScript 严格模式
JavaScript 保留关键字

JavaScript 操作符

JavaScript 操作符
JavaScript 算术运算符
JavaScript 比较操作符
JavaScript 逻辑运算符
JavaScript 位运算符
JavaScript 赋值运算符
JavaScript 条件运算符
JavaScript typeof 运算符
JavaScript Nullish 合并运算符
JavaScript delete 运算符
JavaScript 逗号运算符
JavaScript 分组运算符
JavaScript Yield 运算符
JavaScript 扩展运算符
JavaScript 指数运算符
JavaScript 运算符优先级

JavaScript 控制流

JavaScript if...else 语句
JavaScript while 循环
JavaScript for 循环
JavaScript for...in 循环
JavaScript for...of 循环
JavaScript 循环控制
JavaScript break 语句
JavaScript continue 语句
JavaScript switch 语句
JavaScript 可迭代对象

JavaScript 函数

JavaScript 函数
JavaScript 函数表达式
JavaScript 函数参数和参数值
JavaScript 默认参数
JavaScript Function() 构造函数
JavaScript 函数提升
JavaScript 自执行函数
JavaScript 箭头函数
JavaScript 函数调用
JavaScript call() 方法
JavaScript apply() 方法
JavaScript bind() 方法
JavaScript 闭包
JavaScript 作用域
JavaScript 全局变量
JavaScript 智能函数参数

JavaScript 对象

JavaScript Number 对象
JavaScript Boolean 对象
JavaScript String 对象
JavaScript 数组对象
JavaScript 日期对象
JavaScript DataView 对象
JavaScript 处理程序
JavaScript Math 对象
JavaScript 正则表达式
JavaScript Symbol 类型
JavaScript Set 对象
JavaScript WeakSet 对象
JavaScript Map 对象
JavaScript WeakMap 对象
JavaScript 可迭代对象
JavaScript Reflect 对象
JavaScript TypedArray
JavaScript 模板字面量
JavaScript 标记模板

JavaScript 面向对象

JavaScript 对象
JavaScript 类
JavaScript 对象属性
JavaScript 对象方法
JavaScript 静态方法
JavaScript 显示对象
JavaScript 对象访问器属性
JavaScript 对象构造器
JavaScript 原型(Prototype)
JavaScript ES5 对象方法
JavaScript 封装
JavaScript 继承
JavaScript 抽象
JavaScript 多态
JavaScript 解构赋值
JavaScript 数组解构
JavaScript 嵌套解构
JavaScript 可选链
JavaScript 全局对象
JavaScript mixins
JavaScript 代理(Proxy)

JavaScript Cookies

JavaScript Cookies操作
JavaScript Cookie 属性
JavaScript 删除 Cookies

JavaScript 浏览器 BOM

JavaScript 浏览器对象模型(BOM)
JavaScript 窗口对象
JavaScript Document 对象
JavaScript 屏幕对象
JavaScript Window History 对象
JavaScript Navigator 对象
JavaScript Location 对象
JavaScript Console 对象

JavaScript Web APIs

JavaScript Web API
JavaScript History API
JavaScript 存储 API
JavaScript Forms API
JavaScript Worker API
JavaScript Fetch API
JavaScript 定位 API

JavaScript 事件

JavaScript 事件
JavaScript DOM 事件
JavaScript addEventListener()
JavaScript 鼠标事件
JavaScript 键盘事件
JavaScript 表单事件
JavaScript 窗口事件
JavaScript 事件委托
JavaScript 事件冒泡
JavaScript 事件捕获
JavaScript 自定义事件

JavaScript 错误处理

JavaScript 错误处理
JavaScript try-catch
JavaScript 调试
JavaScript 自定义错误
JavaScript 扩展错误

JavaScript 重要关键字

JavaScript this'关键字
JavaScript void 关键字
JavaScript new 关键字
JavaScript var 关键字

JavaScript HTML DOM

JavaScript HTML DOM
JavaScript DOM 方法
JavaScript 文档对象
JavaScript DOM 元素
JavaScript 文档表单
JavaScript 更改 HTML
JavaScript 更改 CSS
JavaScript DOM 动画
JavaScript DOM 导航
JavaScript DOM 集合
JavaScript 节点列表

JavaScript 杂项

JavaScript Ajax
JavaScript 异步迭代
JavaScript Atomics 对象
JavaScript 剩余参数
JavaScript 页面重定向
JavaScript 对话框
JavaScript 打印网页
JavaScript 表单验证
JavaScript 创建动画
JavaScript 多媒体
JavaScript 图像地图
JavaScript 浏览器兼容性
JavaScript JSON
JavaScript 多行字符串
JavaScript 浅拷贝
JavaScript 日期格式
JavaScript 获取日期方法
JavaScript 调用栈
JavaScript 引用类型
JavaScript 设置日期方法
JavaScript 模块
JavaScript IndexedDB
JavaScript clickjacking(点击劫持)
JavaScript 动态导入
JavaScript BigInt
JavaScript 柯里化(Currying)
JavaScript 图形库
JavaScript Blob
JavaScript Unicode
JavaScript 绘制图形
JavaScript 防抖
JavaScript 性能
JavaScript 编码规范

基础

JavaScript 主页
JavaScript 概述
JavaScript 特性
JavaScript 启用
JavaScript 展示位置
JavaScript 语法
JavaScript hello_world
JavaScript console.log()
JavaScript 注释
JavaScript 变量
JavaScript let 语句
JavaScript 常量
JavaScript 数据类型
JavaScript 类型转换
JavaScript 严格模式
JavaScript 保留关键字

操作符

JavaScript 操作符
JavaScript 算术运算符
JavaScript 比较操作符
JavaScript 逻辑运算符
JavaScript 位运算符
JavaScript 赋值运算符
JavaScript 条件运算符
JavaScript typeof 运算符
JavaScript Nullish 合并运算符
JavaScript delete 运算符
JavaScript 逗号运算符
JavaScript 分组运算符
JavaScript Yield 运算符
JavaScript 扩展运算符
JavaScript 指数运算符
JavaScript 运算符优先级

控制流

JavaScript if...else 语句
JavaScript while 循环
JavaScript for 循环
JavaScript for...in 循环
JavaScript for...of 循环
JavaScript 循环控制
JavaScript break 语句
JavaScript continue 语句
JavaScript switch 语句
JavaScript 可迭代对象

函数

JavaScript 函数
JavaScript 函数表达式
JavaScript 函数参数和参数值
JavaScript 默认参数
JavaScript Function() 构造函数
JavaScript 函数提升
JavaScript 自执行函数
JavaScript 箭头函数
JavaScript 函数调用
JavaScript call() 方法
JavaScript apply() 方法
JavaScript bind() 方法
JavaScript 闭包
JavaScript 作用域
JavaScript 全局变量
JavaScript 智能函数参数

对象

JavaScript Number 对象
JavaScript Boolean 对象
JavaScript String 对象
JavaScript 数组对象
JavaScript 日期对象
JavaScript DataView 对象
JavaScript 处理程序
JavaScript Math 对象
JavaScript 正则表达式
JavaScript Symbol 类型
JavaScript Set 对象
JavaScript WeakSet 对象
JavaScript Map 对象
JavaScript WeakMap 对象
JavaScript 可迭代对象
JavaScript Reflect 对象
JavaScript TypedArray
JavaScript 模板字面量
JavaScript 标记模板

面向对象

JavaScript 对象
JavaScript 类
JavaScript 对象属性
JavaScript 对象方法
JavaScript 静态方法
JavaScript 显示对象
JavaScript 对象访问器属性
JavaScript 对象构造器
JavaScript 原型(Prototype)
JavaScript ES5 对象方法
JavaScript 封装
JavaScript 继承
JavaScript 抽象
JavaScript 多态
JavaScript 解构赋值
JavaScript 数组解构
JavaScript 嵌套解构
JavaScript 可选链
JavaScript 全局对象
JavaScript mixins
JavaScript 代理(Proxy)

Cookies

JavaScript Cookies操作
JavaScript Cookie 属性
JavaScript 删除 Cookies

浏览器 BOM

JavaScript 浏览器对象模型(BOM)
JavaScript 窗口对象
JavaScript Document 对象
JavaScript 屏幕对象
JavaScript Window History 对象
JavaScript Navigator 对象
JavaScript Location 对象
JavaScript Console 对象

Web APIs

JavaScript Web API
JavaScript History API
JavaScript 存储 API
JavaScript Forms API
JavaScript Worker API
JavaScript Fetch API
JavaScript 定位 API

事件

JavaScript 事件
JavaScript DOM 事件
JavaScript addEventListener()
JavaScript 鼠标事件
JavaScript 键盘事件
JavaScript 表单事件
JavaScript 窗口事件
JavaScript 事件委托
JavaScript 事件冒泡
JavaScript 事件捕获
JavaScript 自定义事件

错误处理

JavaScript 错误处理
JavaScript try-catch
JavaScript 调试
JavaScript 自定义错误
JavaScript 扩展错误

重要关键字

JavaScript this'关键字
JavaScript void 关键字
JavaScript new 关键字
JavaScript var 关键字

HTML DOM

JavaScript HTML DOM
JavaScript DOM 方法
JavaScript 文档对象
JavaScript DOM 元素
JavaScript 文档表单
JavaScript 更改 HTML
JavaScript 更改 CSS
JavaScript DOM 动画
JavaScript DOM 导航
JavaScript DOM 集合
JavaScript 节点列表

杂项

JavaScript Ajax
JavaScript 异步迭代
JavaScript Atomics 对象
JavaScript 剩余参数
JavaScript 页面重定向
JavaScript 对话框
JavaScript 打印网页
JavaScript 表单验证
JavaScript 创建动画
JavaScript 多媒体
JavaScript 图像地图
JavaScript 浏览器兼容性
JavaScript JSON
JavaScript 多行字符串
JavaScript 浅拷贝
JavaScript 日期格式
JavaScript 获取日期方法
JavaScript 调用栈
JavaScript 引用类型
JavaScript 设置日期方法
JavaScript 模块
JavaScript IndexedDB
JavaScript clickjacking(点击劫持)
JavaScript 动态导入
JavaScript BigInt
JavaScript 柯里化(Currying)
JavaScript 图形库
JavaScript Blob
JavaScript Unicode
JavaScript 绘制图形
JavaScript 防抖
JavaScript 性能
JavaScript 编码规范

JavaScript clickjacking(点击劫持)


上一章 下一章

Clickjacking 是什么?

攻击者利用 clickjacking(点击劫持)这种形式的网络攻击来欺骗用户点击与他们感知不同的对象;这种欺骗可能导致用户执行非预期的操作。攻击者通过在合法内容之上覆盖不可见元素或框架来达到目的,从而掩盖恶意意图或直接操控网页元素的外观。

clickjacking 可能导致严重的风险,比如未经授权的金融交易、潜在的数据泄露和敏感信息的暴露。clickjacking 影响用户和网站所有者,带来法律后果、经济损失,并加剧网络安全问题。clickjacking 的欺骗性质可能会侵蚀用户信任,并在网络生态系统中产生深远影响。

免责声明:本章节内容仅供教育用途!

Clickjacking 如何运作?

覆盖内容

攻击者创建恶意/垃圾邮件/诈骗网站或将恶意代码注入到实际上合法的网站中。

攻击者将不可见元素或框架定位在页面上的合法内容之上。这些元素可以是透明的 iframes 或其他 HTML 元素。

欺骗性呈现

攻击者然后诱使用户与页面上可见的元素交互,这些通常是按钮、链接或表单。

但是,这些可见元素实际上是位于不可见的恶意元素之上。

用户交互

当用户与可见元素(点击、输入等)交互时,他们不知情地与覆盖在合法内容之上的隐藏恶意元素进行交互。

非预期动作

攻击者可以操控隐藏元素来代表用户执行非预期的动作。这可能包括进行不需要的交易、更改账户设置,甚至提交敏感信息。

用户不知情

因为用户认为他们在与所看到的可见元素互动,因此他们不知道自己的操作被重定向去执行恶意活动。

示例

示例 1:按钮覆盖

提供的 HTML 代码演示了一个按钮覆盖 clickjacking 示例。按钮被呈现给用户,但实际上覆盖在一个隐藏的恶意 iframe 上,导致用户进入可能有害的页面。

home.html

<!DOCTYPE html>
<html>
<body>
   <h2>This is content of the home page</h2>
   <iframe src="legitimate-site.html" width="100%" height="100%"></iframe>
   <div>
   <button onclick="window.location.href='malicious-site.html'">Click Me</button>
   </div>
</body>
</html>

legitimate-site.html

<!DOCTYPE html>
<html>
<body>
   <header>
      <h1>Welcome to Legitimate Site</h1>
   </header>
   <section>
      <p>This is a legitimate website. You can trust the content here.</p>
   </section>
   <footer>
      <p>© 2024 Legitimate Site. All rights reserved.</p>
   </footer>
</body>
</html>

malicious-site.html

<!DOCTYPE html>
<html>
<head>
   <style>
      body {
         font-family: Arial, sans-serif;
      }
      .danger-sign {
         color: red;
         font-size: 2em;
      }
      .warning-message {
         color: red;
         font-weight: bold;
      }
   
</style>
</head>
<body>
   <header>
      <h1 class="danger-sign">?? Danger: Malicious Site</h1>
   </header>
   <section>
      <p class="warning-message">This website has been identified as potentially harmful. Visiting it may pose a security risk to your computer and personal information.</p>
   </section>
   <footer>
      <p>Please close this page immediately and do not proceed.</p>
   </footer>
</body>
</html>

输出

Clickjacking 攻击

示例 2

在此示例中,当网页加载时,它会自动点击标识为 "clickMe" 的按钮。这个特定的按钮,在接收到用户点击交互时,激活一个 JavaScript 事件,将用户重新路由到一个名为 'malicious-site.html' 的潜在有害站点。这种隐蔽的操纵引导用户在不知情或未经同意的情况下前往非预期的目的地。请注意:这些做法确实具有潜在的危害性和不道德性;必须负责任地对待,并在法律和伦理界限内行事。

malicious-site.html 代码与上述相同。

home.html

<!DOCTYPE html>
<html>
<head>
   <style>
      body {
         display: flex;
         align-items: center;
         justify-content: center;
         height: 100vh;
         margin: 0;
      }

      button {
         position: absolute;
         z-index: 1;
         background-color: transparent;
         border: none;
         font-size: 20px;
         cursor: pointer;
      }
   
</style>
</head>
<body onload="myFunction()">
   <h2>Your Content Goes Here</h2>
   <button id="clickMe">Click Me</button>
   <script>
      window.onload = function() {
         var button = document.getElementById("clickMe");
         button.click();
      };
      document.getElementById("clickMe").addEventListener("click", function() {
         window.location.href = "malicious-site.html";
      });
   
</script>
</body>
</html>

输出

Clickjacking 攻击

真实世界的 Clickjacking 事件

  1. Facebook "Like" 按钮(2011) 攻击者在吸引人的视频缩略图上覆盖了一个恶意的 "Like" 按钮,诱骗用户无意中点赞了一个恶意页面。

  2. Adobe Flash 更新骗局(2015) 被伪装成 Adobe Flash 更新的恶意按钮覆盖在合法网站上,导致用户无意下载了恶意软件。

  3. Twitter Clickjacking 攻击 掩饰成诱人内容的恶意链接出现在 Twitter 上,导致用户无意间转发和传播恶意内容。

  4. LinkedIn 假冒连接请求 利用 clickjacking 诱骗 LinkedIn 用户通过覆盖看似无辜内容之上的连接请求按钮与假账户建立联系。

  5. Google Play 商店欺骗 覆盖在 Google Play 商店上的恶意元素诱骗用户进行无意下载或其他操作,通常与广告有关。

防范措施

  1. X-Frame-Options 标头 在你的 Web 服务器响应中设置 X-Frame-Options 标头为 DENY 或 SAMEORIGIN,以防止你的站点被嵌入到 iframes 中。

  2. Frame-Busting 脚本 在你的网页中实施 frame-busting 脚本,以防止它们被嵌入到 iframes 中。

  3. 内容安全策略(CSP) 使用内容安全策略标头来控制你的网站可以从哪些来源加载内容,从而减少 clickjacking 的风险。

  4. 用户教育 教育用户了解与不熟悉或可疑内容交互相关的潜在风险。

随着网络安全的发展,未来的 clickjacking 趋势可能包括更复杂的技术,利用人工智能,增加社会工程学手段的使用,并专注于绕过高级安全措施。此外,随着诸如增强现实(AR)和虚拟现实(VR)等新兴技术的兴起,新的沉浸式 clickjacking 体验向量可能出现,要求持续创新防御策略和提高用户意识。

上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图