实践理解 Web 安全 05 点击劫持

2024-08-23 01:32

本文主要是介绍实践理解 Web 安全 05 点击劫持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击劫持

这种方式现在已经比较少见,仅作为了解。

点击劫持(ClickJacking)是一种视觉上的欺骗手段。

常见方式有两种:

  • 攻击者在自己的网页上使用一个透明的 iframe,覆盖在一个操作按钮或链接上,然后诱导用户点击,此时用户将在不知情的情况下点击透明的 iframe 页面
  • 攻击者在可以发布 HTML 内容的网站,发布一个图片链接,然后通过 CSS 让图片遮挡网页原有位置的内容

透明 iframe

示例

clickjacking.html攻击者的网页:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>攻击者的网页</title></head><body><iframe src="http://localhost:1000/transfer.html" style="position: absolute;top: 75px;left: -2px;background-color: red;opacity:0;"></iframe><h1>在线美女聊天</h1><button style="width: 100px; height: 50px; background-color: aqua;">进入聊天室</button></body>
</html>

transfer.html被攻击网站的页面:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>银行转账页面</title></head><body><button onClick="alert('转账成功')" style="width: 100px; height: 50px">转账</button></body>
</html>

打开 clickjacking.html

在这里插入图片描述

被攻击的网站被嵌入到攻击者的网页,并且被隐藏,覆盖到网页内容上,此时点击【进入聊天室】其实点击的是覆盖在上面的被攻击网站中的【转账按钮】。

显示嵌入的页面:

在这里插入图片描述

又或者百度贴吧刷粉:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>攻击者的网页</title></head><body><iframe src="https://tieba.baidu.com/f?kw=%D2%BB%BB%F7%C4%D0&fr=ala0&tpl=5" style="width:982px;height:500px;position: absolute;opacity:0;"></iframe><h1>在线美女聊天</h1><button style="width: 90px; height: 28px; margin:270px 0 0 300px">进入聊天室</button></body>
</html>

在这里插入图片描述

在这里插入图片描述

解决办法

设置页面的 X-Frame-Options HTTP 响应头,指示页面是否允许在 <frame><iframe><embed><object> 中展现,这样可以确保网站没有被嵌入到别人的站点里,避免 ClickJacking 攻击。

设置的值:

  • deny:禁止页面加载在任何 frame 中,同域名页面中嵌套也不行。
  • sameorigin:页面允许在同域名页面的 frame 中展示
  • allow-from <uri>:页面可以在指定域名下页面的 frame 中展示,例如 allow-from http://example.com

例如:

  • 京东设置的 sameorigin
  • Facebook 设置的 deny
  • Twitter 设置的 deny

在这里插入图片描述

X-Frame-Options 只能通过服务器(IIS、Apache、Nginx等)配置,不能通过 <meta>配置。

更多解决办法参考 点击劫持攻击

图片遮挡

图片覆盖攻击,在被攻击网站发布可以自定义 css 或控制 css 的 HTML 图片内容,将图片覆盖在网页原有的内容之上,形成点击劫持。

例如发布一条评论内容:

<a href="http://bank.com/transfer?money=1000&account=xxxxxxxx"><img src="XXX" style="width:1000px;height:1000px;position:absolute;top:0;left:0;z-index:9999" />
</a>

这种方式同样适用于 <a> 标签等。

解决办法

检查用户提交的 HTML 代码中,<img><a> 等标签的属性是否可能导致浮出,对展示有用户提交内容的 DOM 做一些样式边界控制。

攻击者一般会放一张诱导性的图片,诱导用户点击。

总结

点击劫持算是一种很多人不大关注的攻击。

  • iframe 方式
    • 需要诱导用户进入自己的页面,还要与页面进行交互,实施的攻击成本更高。
    • 所做的是拦截一次浅层的点击,不能获取或诱导用户提交的信息,只能劫持一些直接操作,例如点赞、关注等
  • 图片遮挡
    • 主要是依靠这种方式进行 CSRF 攻击
    • 开发者做好 XSS 和 CSRF 防护,能防御大部分这类攻击

这篇关于实践理解 Web 安全 05 点击劫持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097970

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro