- 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 - 空值合并运算符
- 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 Case
- JavaScript - 用户定义迭代器
- JavaScript 函数
- JavaScript - 函数
- JavaScript - 函数表达式
- JavaScript - 函数参数
- JavaScript - 默认参数
- JavaScript - Function() 构造函数
- JavaScript - 函数提升
- JavaScript - 自执行函数
- JavaScript - 箭头函数
- JavaScript - 函数调用
- JavaScript - Function call()
- JavaScript - Function apply()
- JavaScript - Function bind()
- JavaScript - 闭包
- JavaScript - 变量作用域
- JavaScript - 全局变量
- JavaScript - 智能函数参数
- JavaScript 对象
- JavaScript - Number
- JavaScript - Boolean
- JavaScript - Strings
- JavaScript - Arrays
- JavaScript - Date
- JavaScript - DataView
- JavaScript - Handler
- JavaScript - Math
- JavaScript - RegExp
- JavaScript - Symbol
- JavaScript - Sets
- JavaScript - WeakSet
- JavaScript - Maps
- JavaScript - WeakMap
- JavaScript - 可迭代对象
- JavaScript - Reflect
- JavaScript - TypedArray
- JavaScript - 模板字面量
- JavaScript - 带标签的模板
- 面向对象 JavaScript
- JavaScript - 对象
- JavaScript - 类
- JavaScript - 对象属性
- JavaScript - 对象方法
- JavaScript - 静态方法
- JavaScript - 显示对象
- JavaScript - 对象访问器
- JavaScript - 对象构造函数
- JavaScript - 原生原型
- JavaScript - ES5 对象方法
- JavaScript - 封装
- JavaScript - 继承
- JavaScript - 抽象
- JavaScript - 多态
- JavaScript - 解构赋值
- JavaScript - 对象解构
- JavaScript - 数组解构
- JavaScript - 嵌套解构
- JavaScript - 可选链
- JavaScript - 全局对象
- JavaScript - Mixins
- JavaScript - 代理
- JavaScript 版本
- JavaScript - 历史
- JavaScript - 版本
- JavaScript - ES5
- JavaScript - ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 异步
- JavaScript - 异步
- JavaScript - 回调函数
- JavaScript - Promise
- JavaScript - Async/Await
- JavaScript - 微任务
- JavaScript - Promise 化
- JavaScript - Promise 链式调用
- JavaScript - 定时事件
- JavaScript - setTimeout()
- JavaScript - setInterval()
- JavaScript Cookie
- JavaScript - Cookie
- JavaScript - Cookie 属性
- JavaScript - 删除 Cookie
- JavaScript 浏览器 BOM
- JavaScript - 浏览器对象模型
- JavaScript - Window 对象
- JavaScript - Document 对象
- JavaScript - Screen 对象
- JavaScript - History 对象
- JavaScript - Navigator 对象
- JavaScript - Location 对象
- JavaScript - Console 对象
- JavaScript Web API
- JavaScript - Web API
- JavaScript - History API
- JavaScript - Storage API
- JavaScript - Forms API
- JavaScript - Worker API
- JavaScript - Fetch API
- JavaScript - Geolocation API
- JavaScript 事件
- JavaScript - 事件
- JavaScript - DOM 事件
- JavaScript - addEventListener()
- JavaScript - 鼠标事件
- JavaScript - 键盘事件
- JavaScript - 表单事件
- JavaScript - Window/Document 事件
- 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 - DOM 文档
- JavaScript - DOM 元素
- JavaScript - DOM 属性 (Attr)
- JavaScript - DOM 表单
- JavaScript - 更改 HTML
- JavaScript - 更改 CSS
- JavaScript - DOM 动画
- JavaScript - DOM 导航
- JavaScript - DOM 集合
- JavaScript - DOM NodeList
- JavaScript - DOM DOMTokenList
- JavaScript 杂项
- JavaScript - Ajax
- JavaScript - 异步迭代
- JavaScript - Atomics 对象
- JavaScript - rest 参数
- JavaScript - 页面重定向
- JavaScript - 对话框
- JavaScript - 页面打印
- JavaScript - 验证
- JavaScript - 动画
- JavaScript - 多媒体
- JavaScript - 图像映射
- JavaScript - 浏览器
- JavaScript - JSON
- JavaScript - 多行字符串
- JavaScript - 日期格式
- JavaScript - 获取日期方法
- JavaScript - 设置日期方法
- JavaScript - 模块
- JavaScript - 动态导入
- JavaScript - BigInt
- JavaScript - Blob
- JavaScript - Unicode
- JavaScript - 浅拷贝
- JavaScript - 调用栈
- JavaScript - 引用类型
- JavaScript - IndexedDB
- JavaScript - 点击劫持攻击
- JavaScript - 柯里化
- JavaScript - 图形
- JavaScript - Canvas
- JavaScript - 防抖
- JavaScript - 性能
- JavaScript - 样式指南
JavaScript - 点击劫持攻击
点击劫持攻击
点击劫持是一种网络攻击形式,攻击者利用它欺骗用户点击他们感知到的不同对象;这种欺骗可能导致意外操作。攻击者通过在有效内容上覆盖不可见的元素或框架来实现这一点,从而伪装恶意意图或直接操纵网页元素的外观。
点击劫持会导致严重的风险,例如未经授权的金融交易、潜在的数据泄露以及敏感信息的泄露。点击劫持会影响用户和网站所有者,导致法律后果、经济损失和日益严重的网络安全问题。点击劫持的欺骗性性质可能会损害用户信任,并在数字生态系统中产生深远的影响。
免责声明:本章内容仅供教育目的!
点击劫持是如何运作的?
覆盖内容
攻击者创建恶意/垃圾邮件/诈骗网站,或将恶意代码注入实际上是合法性质的网站。
攻击者将不可见的元素或框架放置在页面上的合法内容之上。这些元素可以是透明的 iframe 或其他 HTML 元素。
欺骗性呈现
然后,攻击者诱使用户与页面上的可见元素交互,这些元素通常是按钮、链接或表单。
但是,这些可见元素实际上位于不可见的恶意元素之上。
用户交互
当用户与可见元素交互(点击、输入等)时,他们不知不觉地与隐藏的恶意元素交互,这些元素覆盖在合法内容之上。
意外操作
攻击者可以操纵隐藏的元素,代表用户执行意外操作。这可能包括进行不必要的交易、更改帐户设置,甚至提交敏感信息。
用户不知情
因为用户认为他们正在与看到的可见元素交互,所以他们不知道自己的操作被重定向以执行恶意活动。
示例
示例 1:按钮覆盖
提供的 HTML 代码演示了一个按钮覆盖点击劫持示例。按钮呈现给用户,但实际上它覆盖在一个隐藏的恶意 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>
输出
示例 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>
输出
现实世界中的点击劫持事件
1. Facebook“赞”按钮 (2011)
攻击者在诱人的视频缩略图上覆盖了一个恶意的“赞”按钮,欺骗用户不知不觉地喜欢了一个恶意的页面。
2. Adobe Flash 更新诈骗 (2015)
伪装成 Adobe Flash 更新的恶意按钮覆盖在合法网站上,导致用户在不知情的情况下下载恶意软件。
3. Twitter 点击劫持攻击
Twitter 上伪装成诱人内容的恶意链接导致用户无意中转发和传播恶意内容。
4. LinkedIn 虚假连接请求
点击劫持被用来欺骗 LinkedIn 用户与虚假个人资料建立连接,方法是在看似无害的内容上覆盖连接请求按钮。
5. Google Play 商店欺骗
Google Play 商店上的恶意覆盖导致用户进行意外下载或操作,通常与广告相关。
预防措施
1. X-Frame-Options 标头
在 Web 服务器的响应中将 X-Frame-Options 标头设置为 DENY 或 SAMEORIGIN,以防止您的站点嵌入在 iframe 中。
2. 防范框架脚本
在您的网页中实现防范框架脚本,以防止它们嵌入在 iframe 中。
3. 内容安全策略 (CSP)
使用内容安全策略标头来控制您的网站可以加载内容的来源,从而降低点击劫持的风险。
4. 用户教育
教育用户了解与交互不熟悉或可疑内容相关的潜在风险。
随着网络安全的发展,点击劫持的未来趋势可能包括利用人工智能的更复杂技术、增加社会工程战术的使用,以及重点绕过高级安全措施。此外,随着增强现实(AR)和虚拟现实(VR)等新兴技术的兴起,沉浸式点击劫持体验的新途径可能会出现,这要求防御策略和用户意识不断创新。