实践理解 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 WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho