跨站请求伪造之基本介绍

一.基本概念

1.定义

跨站请求伪造(Cross - Site Request Forgery,缩写为 CSRF)漏洞是一种网络安全漏洞。它是指攻击者通过诱导用户访问一个恶意网站,利用用户在被信任网站(如银行网站、社交网站等)的登录状态,在用户不知情的情况下,让用户的浏览器向被信任网站发送非用户本意的请求,从而执行一些操作,比如修改用户信息、进行转账等操作。

2.示例
  • 假设用户已经登录了一个网上银行网站bank.com​,其会话 ID 存储在浏览器的 Cookie 中。攻击者创建了一个恶意网站evil.com​,在这个网站上有如下 HTML 代码:

    <form action="https://bank.com/transfer" method="post"><input type="hidden" name="amount" value="1000" /><input type="hidden" name="recipient" value="attacker_account" />
    </form>
    <script>document.forms[0].submit();
    </script>
    
  • 当用户访问evil.com​时,浏览器会自动提交这个表单,向bank.com​发送一个转账请求。由于浏览器会带上用户在bank.com​的会话 Cookie,bank.com​会认为这个请求是用户自己发起的,从而可能导致用户的资金被盗转。

3.危害
  • 用户数据泄露和篡改:攻击者可以通过 CSRF 漏洞获取用户的敏感信息,如修改用户密码、邮箱地址等,从而进一步控制用户账户。
  • 经济损失:在涉及金融交易的网站上,攻击者可以利用 CSRF 漏洞进行非法转账、购物等操作,给用户造成直接的经济损失。
  • 破坏系统功能和信誉:可以对系统的正常功能造成干扰,如大量发送虚假请求,导致系统资源被滥用。同时,也会影响用户对网站的信任,损害网站的信誉。

二.漏洞类型

GET型CSRF
1.定义

GET 型 CSRF(Cross - Site Request Forgery)是 CSRF 攻击的一种类型。在这种攻击方式中,攻击者诱导用户的浏览器发起一个 HTTP GET 请求,利用用户在目标网站的登录状态,在用户不知情的情况下执行目标网站上的某些操作。

2.攻击流程
  1. 构造恶意链接:攻击者首先会构造一个包含恶意请求的链接。因为 HTTP GET 请求通常用于获取资源,在网页中,链接(<a>​标签)、图像(<img>​标签)、脚本(<script>​标签)等元素都可以发起 GET 请求。

  2. 利用自动请求机制:

    • 例如,使用<img>​标签来发起攻击。攻击者在恶意网站上放置一个<img>​标签,将其src​属性设置为目标网站带有恶意操作的 GET 请求链接。当用户访问这个恶意网站时,浏览器会自动尝试加载这个图像,从而发送这个 GET 请求。
    • 同样,对于<a>​标签,攻击者可以设置href​属性为恶意链接,然后通过一些手段(如欺骗用户点击看起来正常的链接)来让用户触发这个请求。不过这种方式相对比较容易被用户察觉,因为用户可能会看到链接的地址。
  3. 利用用户会话状态:就像其他类型的 CSRF 攻击一样,GET 型 CSRF 依赖于用户在目标网站的会话状态。当浏览器发送这个恶意的 GET 请求时,会自动带上用户在目标网站的会话 Cookie,目标网站收到请求后,由于有有效的会话标识,就可能会执行这个请求,以为是用户自己发起的操作。

3.示例
  • 假设一个社交网站有一个点赞功能,其点赞的接口是https://social.com/like?post_id=123​,正常情况下,用户点击社交网站上的点赞按钮会发送这个 GET 请求来为 ID 为 123 的帖子点赞。

  • 攻击者在恶意网站上放置了这样的代码:

    <img src="https://social.com/like?post_id=123" alt="malicious_image" />
    
  • 当用户访问这个恶意网站时,浏览器会自动加载这个 “图像”,实际上就发送了一个点赞的 GET 请求。由于用户在社交网站的会话 Cookie 会被一起发送,社交网站就可能会为帖子 ID 为 123 的内容点赞,而用户对此可能完全不知情。

POST型CSRF
1.定义

POST 型 CSRF(Cross - Site Request Forgery)是一种跨站请求伪造攻击类型,它利用 HTTP POST 请求来实施攻击。攻击者通过诱导用户在已登录目标网站的状态下,在用户浏览器不知情的情况下发送包含恶意意图的 POST 请求,从而导致目标网站执行非用户本意的操作。

2.攻击流程
  1. 构造恶意表单:攻击者在恶意网站上构造一个包含目标网站恶意操作的表单。表单的action​属性指向目标网站中执行关键操作的 URL,例如银行转账的提交 URL、用户信息修改的提交页面等。表单的各个字段则填写攻击者想要执行的操作参数,如转账金额、修改后的用户信息等。

  2. 自动提交表单或诱使用户提交:

    • 攻击者可以使用 JavaScript 代码来自动提交表单。例如,在恶意 HTML 页面中有如下代码:

      <form id="attackForm" action="https://target.com/transfer" method="post"><input type="hidden" name="amount" value="1000" /><input type="hidden" name="recipient" value="attacker_account" />
      </form>
      <script>document.getElementById('attackForm').submit();
      </script>
      
    • 当用户访问这个恶意网站时,浏览器会自动提交这个表单,向目标网站发送一个 POST 请求。或者,攻击者也可以通过一些手段诱使用户手动提交表单,例如将提交按钮伪装成一个吸引人的链接或按钮,让用户在不知情的情况下点击。

  3. 利用用户会话状态:和 GET 型 CSRF 一样,POST 型 CSRF 也依赖于用户在目标网站的会话状态。当浏览器发送这个 POST 请求时,会自动带上用户在目标网站的会话 Cookie,目标网站收到请求后,由于收到了带有有效用户会话标识(Cookie)的请求,就会执行这个请求,以为是用户自己发起的操作。

三.防御措施

  • 使用 CSRF 令牌(Token):

    • 网站在生成表单或关键请求时,同时生成一个唯一的 CSRF 令牌并将其包含在表单中或者作为请求头的一部分。当服务器收到请求时,会验证这个令牌是否有效。因为攻击者无法轻易获取这个令牌,所以无法伪造有效的请求。
  • 验证请求来源(Referer 检查):

    • 服务器可以检查请求的来源(即Referer​头信息),如果请求来自一个不可信的源,就拒绝这个请求。不过这种方法有一定的局限性,因为Referer​头信息可以被浏览器插件或者用户自己修改。
  • Same - Site Cookie 属性设置:

    • 可以将 Cookie 的Same - Site​属性设置为Strict​或者Lax​。Strict​模式下,浏览器只有在用户从同一站点访问时才会发送 Cookie;Lax​模式稍微宽松一些,在一些安全的跨站导航场景下也允许发送 Cookie。这样可以限制 Cookie 在跨站请求中的滥用,从而减轻 CSRF 攻击的风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集BIM介绍基本原理算法流程 BIM代码实现BIM算法实现攻击效果 代码汇总bim.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CIFAR10进行分类 Py…

如何更好的进行时间管理

先想一下我们想要做的事情&#xff0c;然后拿出Excel表格将这些事情记录下来&#xff0c;我们把它叫做任务对这些任务按照重要性&#xff0c;紧急程度进行排序&#xff0c;拿出表格中的前六个任务&#xff0c;就是今天要做的任务新建另一张excel表格&#xff0c;表格的一列为时…

OpenGL —— 2.6.1、绘制一个正方体并贴图渲染颜色(附源码,glfw+glad)

源码效果 C++源码 纹理图片 需下载stb_image.h这个解码图片的库,该库只有一个头文件。 具体代码: vertexShader.glsl #version

ubuntu开机进入initramfs状态

虚拟机卡死成功起后进入了initramfs状态&#xff0c;可能是跟文件系统有问题或者检索不到根文件系统&#xff0c;或者是配置错误&#xff0c;系统磁盘等硬件问题导致 开机后进入如下图的界面&#xff0c; 文中有一条提示 要手动fsck 命令修复 /dev/sda1 命令如下 fsck /de…

java根据Word模板实现动态填充导出

最近项目中需要导出Word&#xff0c;根据不同的信息导出不同的内容&#xff0c;包含文本、列表、图片等&#xff0c;本文使用poi-tl实现在次做以记录。 添加依赖 <!-- word导出 --> <dependency><groupId>com.deepoove</groupId><artifactId>po…

mindie推理大语言模型问题及解决方法汇总

问题说明 使用功能mindie 1.0 RC2推理大语言模型&#xff0c;遇到不少问题&#xff0c;记录下解决思路。 我的硬件是910B4。 问题及解决 问题1 在docker内启动mindie时终端报错 Fatal Python error: PyThreadState_Get: the function must be called with the GIL held, …

Selenium 全面指南

Selenium 是一个强大的 Web 自动化工具&#xff0c;支持多种浏览器和语言绑定。 1. Selenium 的基本概念 WebDriver&#xff1a;Selenium 提供的核心接口&#xff0c;用于控制浏览器操作。显式等待&#xff1a;等待特定条件满足后再执行操作。隐式等待&#xff1a;全局设置一个…

Go框架比较:goframe、beego、iris和gin

由于工作需要&#xff0c;这些年来也接触了不少的开发框架&#xff0c;Golang的开发框架比较多&#xff0c;不过基本都是Web"框架"为主。这里稍微打了个引号&#xff0c;因为大部分"框架"从设计和功能定位上来讲&#xff0c;充其量都只能算是一个组件&…

【华为OD-E卷-木板 100分(python、java、c++、js、c)】

【华为OD-E卷-木板 100分&#xff08;python、java、c、js、c&#xff09;】 题目 小明有 n 块木板&#xff0c;第 i ( 1 ≤ i ≤ n ) 块木板长度为 ai。 小明买了一块长度为 m 的木料&#xff0c;这块木料可以切割成任意块&#xff0c;拼接到已有的木板上&#xff0c;用来加…

sqlserver临时表来做表联查复杂查询

使用临时表&#xff0c;先查询出结果&#xff0c;在用于后面表的子查询或者联查 -- 删除表1if EXISTS ( SELECT 1 FROM tempdb.sys.objects where name like #temp_PublishRecord% ) beginDROP TABLE #temp_PublishRecordprint 已删除临时表 #temp_PublishRecordend--创…

OMG DDS 规范漫谈:分布式数据交互的演进之路

一、由来与起源脉络 OMG DDS&#xff08;Object Management Group Data Distribution Service&#xff09;的发展是计算机科学和技术进步的一个缩影&#xff0c;它反映了对高效、可靠的数据共享需求的响应。DDS 的概念萌生于20世纪90年代末&#xff0c;当时分布式计算已经从理…

1.使用 Couchbase 数仓和 Temporal(一个分布式任务调度和编排框架)实现每 5 分钟的增量任务

在使用 Couchbase 数仓和 Temporal&#xff08;一个分布式任务调度和编排框架&#xff09;实现每 5 分钟的增量任务时&#xff0c;可以按照以下步骤实现&#xff0c;同时需要注意关键点。 实现方案 1. 数据层设计&#xff08;Couchbase 增量存储与标记&#xff09; 在 Couchb…

Spring源码分析之AOP-@EnableAspectJAutoProxy

前言 这篇文章之前我们说了Springboot的启动流程,Bean对象怎么实现从无到有的一个过程还有一些接口的拓展的实现等等那么从这一篇文章开始的话我们就会开始说一说我们的常用的AOP它的底层实现原理所以大家一起加油加油&#xff01;&#xff01;&#xff01; AOP: 1.简介: AOP的…

Linux(Centos 7.6)基本信息查看

1.服务器硬件信息查看 1.1.服务器厂商、产品名称查看 dmidecode -s system-manufacturer&#xff1a;查看服务器厂商信息 dmidecode -s system-product-name&#xff1a;查看服务器产品名称信息 1.Windows使用VMware安装的Linux(Centos 7.6)后&#xff0c;服务器厂商、产品名…

多个图片转换为PDF文件

将多个图片转换为PDF文件在Python中可以通过多个库来实现&#xff0c;其中最常用的库之一是Pillow&#xff08;用于图像处理&#xff09;和reportlab&#xff08;用于生成PDF&#xff09;。不过&#xff0c;对于直接图片转PDF的操作&#xff0c;更推荐使用Pillow配合PyMuPDF&am…

小程序app封装公用顶部筛选区uv-drop-down

参考ui:DropDown 下拉筛选 | 我的资料管理-uv-ui 是全面兼容vue32、nvue、app、h5、小程序等多端的uni-app生态框架 样式示例&#xff1a; 封装公用文件代码 dropDownTemplete <template><!-- 顶部下拉筛选区封装公用组件 --><view><uv-drop-down ref&…

LeetCode:101. 对称二叉树

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输…

Docker-如何启动docker

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们在上一章&#xff0c;讲了虚拟化&#xff0c;虚拟化是把硬件虚拟化&#xff0c;然后创建出来的虚拟机完全隔离&#xff…

COMSOL with Matlab

文章目录 基本介绍COMSOL with MatlabCOMSOL主Matlab辅Matlab为主Comsol为辅 操作步骤常用指令mphopenmphgeommghmeshmphmeshstatsmphnavigatormphplot常用指令mphsavemphlaunchModelUtil.clear 实例教学自动另存新档**把语法套用到边界条件**把语法套用到另存新档 函数及其微分…

游戏关卡设计方法的杂感

1、正规思路是&#xff1a;先写设计文档&#xff0c;画平面图&#xff0c;再做白模关卡&#xff0c;再做正规模型的关卡。 一步步扩大。 当然是有道理的&#xff0c;从小到大&#xff0c; 但实际上这需要很强的想象力&#xff0c;很多细节靠脑补&#xff0c;初学者很难做好。…