实践理解 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 Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方