实践理解 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

相关文章

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

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()