当前位置: 首页 > news >正文

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攻击,保护用户数据安全。

相关文章:

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

CSRF(跨站请求伪造)概述 CSRF(Cross-Site Request Forgery),即跨站请求伪造,是一种攻击手段,攻击者利用受害者在网站上已认证的身份信息,诱使受害者发起未经授权的请求,从…...

【LeetCode】【算法】22. 括号生成

LeetCode 22. 括号生成 题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 解题思路 天天到处看答案,看的灵神的解题思路回溯不会写?套路在此!(Pyth…...

WPF+MVVM案例实战与特效(二十五)- 3D粒子波浪效果实现

文章目录 1、案例效果2、案例实现1、文件创建2. 功能代码实现3、粒子功能应用1、前端布局与样式2、代码解释2、 后端功能代码1、案例效果 2、案例实现 1、文件创建 打开 Wpf_Examples 项目、Models 文件夹下创建 3D粒子模型类 ParticleWaveEffectModel.cs 文件。在Tools 文件…...

wsl2安装和使用

WSL(Windows Subsystem for Linux)是一个在 Windows 操作系统上运行 Linux 二进制可执行文件的兼容层。它允许用户在 Windows 上运行 Linux 命令行工具和应用程序。 主要功能 简化开发流程:开发者可以在 Windows 上使用 Linux 的开发工具链。兼容性:支持多种 Linux 发行版,…...

【划分型 DP-最优划分】【腾讯笔试压轴】【hard】力扣132. 分割回文串 II

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文串。 返回符合要求的 最少分割次数 。 示例 1: 输入:s “aab” 输出:1 解释:只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子…...

Kubernetes-镜像加速篇-01-加速工具

[友情链接]加速三剑客 镜像加速:https://github.com/DaoCloud/public-image-mirror 二进制文件加速:https://github.com/DaoCloud/public-binary-files-mirror Helm 加速:https://github.com/DaoCloud/public-helm-charts-mirror 二进制文件…...

字母的异位数

做leetcode242题时出现了一个错误&#xff1a; bool isAnagram(string s, string t) {map<char,int> cnt;bool ans true;int lens s.length();int lent t.length();for(int i 0;i < lens;i){cnt[s[i]] 1;cout << cnt[s[i]] << endl;}for(int i 0;i…...

达梦数据库DM Exception字符串截断错误,略坑~

前言 我之前在使用达梦数据库的时候&#xff0c;遇到了很多很多的问题&#xff0c;主要对达梦数据库也不是很熟悉&#xff0c;它的语法和我所熟悉的mysql和postgresql有很大的区别。 今天&#xff0c;讲一下我之前遇到的一个问题。这个问题的起因是用达梦数据库迁移工具&…...

vue实现图片无限滚动播放

本人vue新手菜鸡&#xff0c;文章为自己在项目中遇到问题的记录&#xff0c;如有不足还请大佬指正 文章目录 实现效果代码展示总结 因为刚接触vue&#xff0c;本想着看看能不能用一些element的组件实现图片的轮播效果&#xff0c;尝试使用过element-UI里的走马灯Carouse&#x…...

python爬虫指南——初学者避坑篇

目录 Python爬虫初学者学习指南一、学习方向二、Python爬虫知识点总结三、具体知识点详解和实现步骤1. HTTP请求和HTML解析2. 正则表达式提取数据3. 动态内容爬取4. 数据存储5. 反爬虫应对措施 四、完整案例&#xff1a;爬取京东商品信息1. 导入库和设置基本信息2. 获取网页内容…...

Vivado+Vscode联合打造verilog环境

一、Vivado下载安装 详细参考我另一篇文章&#xff1a; Vivado2022.2下载安装_fpga vivado下载-CSDN博客https://blog.csdn.net/weixin_61081689/article/details/143460790?spm1001.2014.3001.5501 二、Vscode下载安装 详细参考我另一篇文章&#xff1a; VscodeAnacond…...

Python 微服务架构

Python 微服务架构 目录 &#x1f6e0; 微服务架构的基本概念与设计原则⚡ Python 在微服务中的应用&#xff08;Flask、FastAPI等框架&#xff09;&#x1f680; 微服务的自动化部署与运维&#x1f50d; 服务发现与负载均衡&#x1f4ca; 微服务中的日志集中管理与监控&…...

Android JNI 技术入门指南

引言 在Android开发中&#xff0c;Java是一种主要的编程语言&#xff0c;然而&#xff0c;对于一些性能要求较高的场景&#xff08;如音视频处理、图像处理、计算密集型任务等&#xff09;&#xff0c;我们可能需要使用到C或C等语言来编写底层的高效代码。为了实现Java代码与C…...

实在智能受邀出席柳州市智能终端及机器人产业发展合作大会

10 月 27 日至 28 日&#xff0c;由中共柳州市委员会与柳州市人民政府主办的2024柳州市智能终端及机器人产业发展合作大会在柳州莲花山庄隆重举行。大会充分整合各方资源&#xff0c;持续深化与柳州在重大战略规划、重大平台建设、重点产业培育等领域的合作。作为智能体行业的知…...

算法求解(C#)-- 寻找包含目标字符串的最短子串算法

1. 引言 在字符串处理中&#xff0c;我们经常需要从一个较长的字符串中找到包含特定目标字符串的最短子串。这个问题在文本搜索、基因序列分析等领域有着广泛的应用。本文将介绍一种高效的算法来解决这个问题。 2. 问题描述 给定一个源字符串 source 和一个目标字符串 targe…...

AscendC从入门到精通系列(二)基于Kernel直调开发AscendC算子

本次主要讨论下AscendC算子的开发流程&#xff0c;基于Kernel直调工程的算子开发。 1 AscendC算子开发的基本流程 使用Ascend C完成Add算子核函数开发&#xff1b; 使用ICPU_RUN_KF CPU调测宏完成算子核函数CPU侧运行验证&#xff1b; 使用<<<>>>内核调用符…...

DAO模式的理解

目录 DAO模式 含义 DAO模式 的理解 分层思维 分层含义 分层目的 dao层 dao包&#xff08;对接的是操作数据库的接口&#xff09; dao包下lmpl 包&#xff08;dao包中接口的实现类&#xff09; 补充 1 你创建的实体类需要和数据库中建的表一一对应。 总结 DAO模式 含义…...

使用GitHub Actions实现CI/CD流程

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用GitHub Actions实现CI/CD流程 GitHub Actions 简介 创建仓库 配置工作流 示例工作流文件 触发和运行工作流 部署应用 最佳实…...

机器人助力Bridge Champ游戏:1.4.2版本如何提升玩家体验

在Bridge Champ游戏中&#xff0c;机器人扮演着桥牌游戏的“无名英雄”角色&#xff0c;默默地提升玩家体验。凭借智能化的设计&#xff0c;这些机器人不仅能够陪练&#xff0c;也大大提升了比赛的流畅度与趣味性。 Bridge Champ是什么 Bridge Champ是一个基于Ignis公链的在线…...

滑动窗口(单调队列维护窗口)-acwing

题目&#xff1a; 154. 滑动窗口 - AcWing题库 代码&#xff08;删除队列窗口多余的>单调队列&#xff09; 判断最值是否滑出窗口可以放在 入队的后面。 但是&#xff0c;判断&#xff0c;准备入队元素比前面小&#xff0c;要从队尾出队&#xff0c;放在入队前。 总之&a…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...