CSRF 跨站请求伪造的实现原理和预防措施

CSRF(跨站请求伪造)概述
CSRF(Cross-Site Request Forgery),即跨站请求伪造,是一种攻击手段,攻击者利用受害者在网站上已认证的身份信息,诱使受害者发起未经授权的请求,从而对受害者账户执行不希望的操作。由于受害者的身份信息(如cookie)会自动随请求发送,攻击者可以借此执行一些恶意操作。
CSRF攻击原理

1.攻击者准备恶意请求:攻击者构造一个恶意的请求,例如修改密码、转账等,通常这个请求会嵌入到一个网站、邮件或网页广告等地方。该请求通常是向一个已经登录的用户所访问的站点发起的。
2.受害者访问恶意页面:受害者无意间访问了这个恶意页面,通常这个页面会包含恶意的链接、表单、图片等,可能通过 XSS 或社交工程学等方式诱使受害者点击或加载。
3.浏览器自动发送请求:当受害者访问该恶意页面时,浏览器会携带当前登录用户的认证信息(如cookie)自动发送请求。例如,如果用户已经登录了某个银行网站,恶意请求可能会是一个转账请求,浏览器会自动带上该银行网站的登录cookie。
4.恶意请求执行:由于请求看似是合法用户发起的,服务器无法识别请求的真正来源,最终执行了攻击者预设的操作。

CSRF的攻击场景

5.用户在登录状态下,点击攻击者精心设计的恶意链接。
6.恶意链接会以用户的名义向受害者已经登录的网站发起请求,执行一些危害性操作(如修改用户资料、转账、提交表单等)。

例如,假设攻击者希望在一个受害者的账户上转账,攻击者可以构造如下的恶意链接:
<img src="http://bank.com/transfer?amount=1000&toAccount=attackerAccount" />

当受害者访问此链接时,浏览器会自动发送请求,且该请求带有受害者的身份认证信息(如cookie),因此服务器会认为这是合法的请求并执行。
CSRF的预防措施
为了防止CSRF攻击,通常采取以下几种策略:
1. 使用Token防护(Anti-CSRF Token)

7.原理:每当用户发起请求时,服务器会在页面中插入一个随机的token,这个token是一个难以猜测的唯一标识符。每次用户发起请求时,都会将该token与请求一起发送,服务器根据token来验证请求是否合法。
8.实现方式:在表单中加入一个隐藏的字段,包含服务器生成的token,每次请求时客户端必须发送这个token。服务器验证请求中的token与当前会话中的token是否一致,如果不一致则拒绝请求。
例如,在HTML表单中插入一个隐藏的token字段:

   <form method="POST" action="/transfer">
       <input type="hidden" name="csrf_token" value="randomGeneratedToken">
       <input type="text" name="amount" value="1000">
       <input type="text" name="toAccount" value="1234567890">
       <input type="submit" value="Transfer">
   </form>

每次提交时,服务器会验证 csrf_token 是否与用户会话中的token一致。
2. 使用SameSite Cookie属性

9.原理:SameSite 是一个cookie属性,限制了浏览器在跨站请求时是否会携带cookie。它可以帮助防止CSRF攻击,因为浏览器在发起跨站请求时不会自动携带cookie,从而阻止了攻击者伪造请求。
10.实现方式:将cookie的SameSite属性设置为Strict或Lax,可以防止浏览器在跨站请求时自动附带cookie。
例如:

   Set-Cookie: session_id=abc123; SameSite=Strict; Secure; HttpOnly;


11.SameSite=Strict:完全阻止跨站请求发送cookie。
12.SameSite=Lax:允许一些类型的跨站请求(例如GET请求),但阻止复杂的跨站请求(例如POST请求)。

3. Referer Header检查

13.原理:通过检查请求头中的 Referer 或 Origin 字段,来确认请求是否来自合法的源站。合法的请求应该来自同一个域名。如果请求头中的Referer或Origin字段为空或者与期望的源站不匹配,则可以判定该请求为潜在的CSRF攻击。
14.实现方式:服务器可以根据请求的Referer和Origin字段来验证请求来源,拒绝不符合的请求。
例如,服务器检查 Referer:

   if (request.headers['referer'] !== 'https://example.com') {
       return res.status(403).send('Forbidden');
   }

4. 双重认证(Two-Factor Authentication)

15.原理:通过增加额外的身份验证步骤,例如要求用户输入验证码或手机短信验证码,在重要操作(如转账、密码更改等)时,进一步提高安全性,防止CSRF攻击。
16.实现方式:在敏感操作时,要求用户输入验证码、短信或其他第二种验证信息,以确认操作是由用户本人发起的。

5. 避免 GET 请求修改数据

17.原理:根据HTTP规范,GET请求应该是幂等的,不应该用于修改服务器状态。所有修改数据的操作应使用POST、PUT、PATCH等方法,而GET请求应该仅用于获取资源。
18.实现方式:确保所有可能导致数据修改的请求都使用POST方法,并且不依赖GET请求来提交表单或执行操作。

6. 用户行为确认

19.原理:某些情况下,可以通过要求用户再次确认他们的意图来避免恶意操作,例如,在重要操作(如转账、删除账户)时要求用户再次输入密码或通过其他方式确认。
20.实现方式:要求用户再次确认操作或提供额外的身份验证信息。

总结
CSRF是通过冒充合法用户发起恶意请求的攻击方式,主要依赖于受害者的浏览器自动携带身份认证信息(如cookie)发送请求。为了防止CSRF攻击,可以采用以下几种策略:

21.使用CSRF Token:为每个请求生成唯一的token,确保请求是合法用户发起的。
22.使用SameSite Cookies:通过限制cookie的发送范围,避免跨站请求伪造。
23.Referer/Origin头检查:通过检查请求的来源,确认请求是否来自合法的站点。
24.双重认证:增加额外的身份验证步骤,防止未授权操作。
25.避免GET请求修改数据:将所有可能修改服务器状态的请求限制为POST请求。
26.用户行为确认:通过额外的确认步骤确保操作是由用户本人发起的。

这些措施能够有效地防止CSRF攻击,保护用户数据安全。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于ADC12DJ5200 采样率10.4GS/s的AD子卡设计方案

FMC AD 子卡 12bit 2 通道 5.2GS/s 或单通道 10.4GS/s,是一款高分辨率、高采样率 ADC FMC 子板。它提 供 2 路 12 位 5.2GS/s 或 1 路 10.4GS/s 的 A/D 通 道 , 全功率模拟 -3dB 输入带宽可达 8GHz。本产品是基于 TI 公司ADC12DJ5200 模数转换芯片而设计…

SAP ABAP开发学习——WDA 六 控件与上下文数据编程

目录 控制器就是一个class 钩子方法(hook method) 组件控制器的hookmethod 普通方法的三种类型 控制器的属性 对参照使用的控制器的引用 访问数据节点 访问节点中的元素 小结1 访问单个节点的属性 取得集合中所有节点的属性 更改单个节点属性…

一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

手动切换python版本

本地有多个python版本,在没有安装anaconda工具,需要手动切换环境需要的操作。 目录 1、建立目录 建立pip的本地目录,如下图: 2、打开系统环境变量,增加变量 打开系统环境变量,我这里用的是“编辑帐户的…

在 ASP.NET Core 6.0 中使用 Swagger/OpenAPI 丰富 Web API 文档

示例代码:https://download.csdn.net/download/hefeng_aspnet/89961435 介绍 在选择或尝试与 API 集成之前,大多数开发人员都会查看其 API 文档。保持 API 文档更新以反映软件更改是一项挑战,需要时间和精力。对于 Web API,我们…

125. 屏幕坐标转标准设备坐标

在讲解下节课鼠标点击选中模型之前,先给大家讲解下坐标系的问题。 获取鼠标事件坐标 先来了解一些,普通的web前端相关知识。 鼠标单击HTML元素,通过函数的参数鼠标事件对象event,可以获取一些坐标信息。课件源码中是以threejs的…

【SAP-ABAP】-BTE增强

BTE增强的概念: 有点类似财务的替代增强 SAP有很多这种增强方式,就是相当于复制一个原有FM,替换FM里面的逻辑 事务码:FIBF--维护事务BTE 一、操作步骤:FIBF->环境->信息系统,查找事件号及需要替换的函…

【云原生开发】K8S集群管理后端开发设计与实现

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

爱普生SG-8201CG可编程振荡器的应用领域

在科技飞速发展的今天,电子设备的性能和稳定性成为各个行业关注的焦点。爱普生 SG - 8201CG 可编程振荡器以其卓越的性能,在众多领域中大放异彩,成为推动行业进步的关键力量。 1.通信领域:高速通信的精准守护者 在通信领域&…

计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session

文章目录 一、HTTP协议的特点1.1 特点1.2 HTTP是不保存状态的协议,如何保存用户状态? 二、浏览器中输入URL返回页面过程(重)三、HTTP状态码四、HTTP相关协议对比4.1 HTTP和HTTPS的区别(重)4.2 HTTP1.0和HTTP1.1的区别…

基于Spring Boot的网上商品订单转手系统设计与实现,LW+源码+讲解

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装网上商品订单转手系统软件来发挥其高效地信息处理的作用&a…

设备的设计流程和风险评估

为了保证机器的安全性,在机器设计和开发过程中必须降低风险。该过程如下列流程图所示。 风险评估的含义以及如何进行

【MATLAB源码-第209期】基于matlab的MSK调制解调仿真,对比三种解调方法的误码率分别是相干解调,1比特差分,2比特差分。

操作环境: MATLAB 2022a 1、算法描述 最小频移键控(Minimum Shift Keying,简称MSK)是一种特殊的连续相位频移键控(CPFSK),它以其频谱效率高、抗干扰能力强而著称,广泛应用于无线通…

Git 的分支管理

一、分支介绍 1、分支是什么 Git作为一个分布式版本控制系统,提供了强大而灵活的分支管理功能,使得开发团队能够高效地协作开发、管理不同的功能和版本。 2、为什么有分支 一般情况下主分支(master/main)应始终保持可部署的状…

论文速读:简化目标检测的无源域适应-有效的自我训练策略和性能洞察(ECCV2024)

中文标题:简化目标检测的无源域适应:有效的自我训练策略和性能洞察 原文标题:Simplifying Source-Free Domain Adaptation for Object Detection: Effective Self-Training Strategies and Performance Insights 此篇文章为论文速读&#xff…

mac找到主目录下的文件夹

访达-(上方状态栏显示)-然后在

FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。

上图是在安防领域的要求,一般都是一个屏幕上有显示多个摄像头捕捉到的画面,这一节,我们是从文件中读取多个文件,显示在屏幕上。 一 改动UI文件 这里我们要添加两个label,为了区分我们设置一下背景色(这个是…

RK3576 LINUX RKNN SDK 测试

安装Conda工具 安装 Miniforge Conda wget -c https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh chmod 777 Miniforge3-Linux-x86_64.sh bash Miniforge3-Linux-x86_64.shsource ~/miniforge3/bin/activate # Miniforge 安装的…

新能源行业必会基础知识-----电力现货市场理论篇-----主目录-----持续更新

新能源行业知识体系-------主目录-----持续更新https://blog.csdn.net/grd_java/article/details/140004020 这本书是2023年出版的,是当下了解国内电力市场最好的途径了。 电力现货市场理论篇 一、电力市场概述1. 电力市场总体架构2. 电力市场模式选择3. 电力市场建…

docker 拉取MySQL8.0镜像以及安装

目录 一、docker安装MySQL镜像 搜索images 拉取MySQL镜像 二、数据挂载 在/root/mysql/conf中创建 *.cnf 文件 创建容器,将数据,日志,配置文件映射到本机 检查MySQL是否启动成功: 三、DBeaver数据库连接 问题一、Public Key Retrieval is not allowed 问题…