CSRF Token为什么写在Cookie中?CSRF漏洞分析

news2025/4/19 16:01:23

1. 什么是CSRF?

CSRF或XSRF,跨站请求伪造。简单地说,就是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

在这里插入图片描述

这里最最关键的因素是令牌。用户在网站A登陆成功后,服务端颁发令牌并存储到浏览器中。客户端存储令牌方式主要2种:Cookie、Localstorage。只有令牌存储在Cookie中才能利用CSRF攻击。
在这里插入图片描述

令牌的存储方式有两种:
第一种存储到客户端的Cookie中,存储到Cookie中大部分是基于浏览器作为客户端的业务。
第二中存储到LocalStorage中,存储到LocalStorage大部分是基于APP或者小程序内置的LocalStorage。
Cookie和LocalStorage的区别在于,用户访问同源站点的时候,Cookie会默认携带发送给服务端,而localStorage不会。就是说,客户端发送请求的时候,不需在请求中设置Cookie,请求过程会自动从客户端Cookie中获取。而令牌存储在localStorage中,客户端需要先从localstorage中获取令牌,并添加到请求头中。

2. CSRF Token的校验规则

因为同源策略的限制,当正常用户通过账号密码等方式登陆网站A后,在不注销账号或当前Cookie失效之前,再次访问网站A时(协议、IP、端口号相同则属于同源)浏览器会自动在http请求包中带上该网站用户登陆后的Cookie信息。
服务器进行CSRF防御校验的时候,是拿用户http请求体中的token参数值和Cookie中的csrftoken值进行比对。如果值一样了,操作才被允许执行。

3. HTTP复杂请求

大部分前后端分离的项目,前端都是发起复杂请求的。Content-Type:application/json,或者有自定义的Header头都属于复杂请求。
同源策略要求复杂请求必须先进行预检(OPTIONS)请求,预检通过了才能进行POST请求。预检请求会询问服务端:允许的请求源,是否允许携带Cookie,允许的请求方式(POST、PUT、DELETE等),允许的Header头字段。可以通过Nginx设置,也可以通过服务端程序设置。

4. CSRF Token为什么可以写在Cookie中?

CSRF Token写在Cookie中,攻击者不就获取到Token了,那防御不就失效了吗?
在此攻击过程中用户Cookie对于攻击者来说是不可见的是未知的、不可见的,攻击者能做到仅仅是借用Cookie,而Cookie里面具体写了什么,攻击者是不知道的。又因为Cookie里的信息对于攻击者来说是不可预知的,无法伪造的,所以将CSRF-TOKEN写在Cookie中符合就CSRF防御思想中的不可预知原则。

5. 跨域请求之简单请求和复杂请求

为了从源头上解决这个问题,Google公司起草了一份草案来改进HTTP协议,那就是为Set-Cookie响应头新增Samesite属性,它用来标明这个 Cookie是个“同站 Cookie”,同站Cookie只能作为第一方Cookie,不能作为第三方Cookie,Samesite 有两个属性值,分别是 Strict 和 Lax。

Samesite=Strict

这种称为严格模式,表明这个 Cookie 在任何情况下都不可能作为第三方 Cookie,绝无例外。比如说 b.com 设置了如下 Cookie:

Set-Cookie: foo=1; Samesite=Strict
Set-Cookie: bar=2; Samesite=Lax
Set-Cookie: baz=3

我们在 a.com 下发起对 b.com 的任意请求,foo 这个 Cookie 都不会被包含在 Cookie 请求头中,但 bar 会。举个实际的例子就是,假如淘宝网站用来识别用户登录与否的 Cookie 被设置成了 Samesite=Strict,那么用户从百度搜索页面甚至天猫页面的链接点击进入淘宝后,淘宝都不会是登录状态,因为淘宝的服务器不会接受到那个 Cookie,其它网站发起的对淘宝的任意请求都不会带上那个 Cookie。

Samesite=Lax

这种称为宽松模式,比 Strict 放宽了点限制:假如这个请求是这种请求(改变了当前页面或者打开了新页面)且同时是个GET请求,则这个Cookie可以作为第三方Cookie。比如说 b.com设置了如下Cookie:

Set-Cookie: foo=1; Samesite=Strict
Set-Cookie: bar=2; Samesite=Lax
Set-Cookie: baz=3

当用户从 a.com 点击链接进入 b.com 时,foo 这个 Cookie 不会被包含在 Cookie 请求头中,但 bar 和 baz 会,也就是说用户在不同网站之间通过链接跳转是不受影响了。但假如这个请求是从 a.com 发起的对 b.com 的异步请求,或者页面跳转是通过表单的 post 提交触发的,则bar也不会发送。

需要注意的是,这个SameSite属性是Google家的东西,也就是可能存在别的浏览器不兼容的情况,所以还需要别的方案作辅助验证——双重Cookie验证。

6. 双重Cookie验证

利用CSRF攻击不能获取到用户Cookie的特点,我们可以要求Ajax和表单请求携带一个Cookie值。
双重Cookie验证流程:

  1. 在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串(例如csrfcookie=db4d8d15945941e5b48d6c1626b52eb4b)。
  2. 在前端向后端发起请求时,取出Cookie,并添加到URL的参数中(接上例POST https://www.a.com/comment?csrfcookie=db4d8d15945941e5b48d6c1626b52eb4b)。
  3. 后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝。

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

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

相关文章

Java - 多进程编程(对比线程、API 操作)

目录 一、多进程编程 1.1、为什么要使用多进程编程 1.2、Java 中多进程编程的实现 1.2.1、前言 1.2.2、进程创建 1.2.3、进程等待 1.2.4、封装操作到一个工具类中 一、多进程编程 1.1、为什么要使用多进程编程 一个 .exe 文件执行以后,就会变成一个进程. 多…

高质量发展新引擎:智能工业操作系统助力产业升级

工业操作系统是推动制造业高质量发展的重要支撑,也是推动经济发展方式转变的重要手段。打造自主可控的工业实时操作系统是实现工业科技自立自强的必然要求,是推动高质量发展的必由之路。 基于软件定义控制的智能工业操作系统 Intewell操作系统是由科东…

【技术番外篇】国家高新技术企业 认定

第一个网站:高新技术企业认定管理工作网 http://www.innocom.gov.cn/gqrdw/index.shtml 多给认定机构打咨询电话,少走弯路 有什么不懂的地方就可以打电话咨询专业人士 http://www.innocom.gov.cn/gqrdw/c101321/201905/3b94fbc91a894bcbba97fb7125c9…

【ChatGLM2-6B】nginx转发配置

背景 好不容易把ChatGLM2-6B大语言模型部署好了,使用streamlit方式启动起来了,终于可以愉快的玩耍了,然后想着申请一个域名,使用HTTPS协议访问,但实践过程中,发现这个大语言模型的nginx转发配置还是有点小…

Swingbench 压力测试(超详细)

目录 前提需要有配置好的oracle哦 1、环境准备 2、安装Swingbench 3、造数据 4、压测 前提需要有配置好的oracle哦 1、环境准备 启动监听 lsnrctl start 启动数据库 sqlplus / as sysdba startup 创建表 CREATE TABLESPACE soe DATAFILE /u01/app/oracle/oradata/or…

重生奇迹MU游戏上格斗家挂机小技巧

重生奇迹MU作为一个独特的职业,重生奇迹MU游戏中的格斗家有着多种挂机技巧,以下是一些重生奇迹MU格斗家挂机小技巧供玩家参考: 1.使用幽冥光速拳 幽冥光速拳是格斗家的核心技能之一,可以快速消灭怪物并提高经验值。建议玩家将此…

【PX4报错】Crash dumps present on SD,vehicle needs service

报错: Critical: Preflight Fail: Crash dumps present on SD,vehicle needs service 解决: 将COM_ARM_HFLT_CHECK改为Disabled 参考: PX4常见解锁失败报错及解决方法

PCA降维可视化

二维 import pandas as pd import warnings warnings.filterwarnings("ignore")df pd.read_csv(data/data.csv).dropna() features df.columns[:-1] X, y df[features], df[label]from sklearn.preprocessing import MinMaxScaler # 创建MinMaxScaler对象 scaler…

论坛介绍|COSCon'23 大数据(D)

众多开源爱好者翘首期盼的开源盛会:第八届中国开源年会(COSCon23)将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是:“开源:川流不息、山海相映”!各位新老朋友们,欢迎到成都&a…

柯桥银泰附近有学德语的地方吗,留学德语培训

01 die Garantiefr jemandem/etwas 给某人或某事的保障 Das System bietet die Garantie fr die Bauer. 02 der Gebrauch von etwas 使用某物 Wir haben den Gebrauch vom Computer gelerbt. 我们学会了使用电脑。 03 Die Geduld mit jemandem/etwas 对..的耐心 Der Lehre…

llava1.5-部署

llava1.5 ——demo部署 下载代码和权重 新建weights文件夹,并下载到LLaVA/weights/中。->需要修改文件名为llava-版本,例如llava-v1.5-7b. 运行 启动控制台 python -m llava.serve.controller --host 0.0.0.0 --port 4006启动gradio python -m…

网络拥塞控制的经济学原理

作为一个流通和兑换系统(与被发送速率兑换出的带宽不同,公路交通不是兑换系统,车辆只是单体),网络传输与货币流通和兑换是一回事,借一些经济学术语能更深刻理解拥塞的成因和缓解以及制定拥塞控制策略,这是一个新视角。…

2024年浙大MPA复试可能面临的变数:权重加大

熟悉浙大mpa项目常规批复试规则的同学都知道,每年的复试成绩权重一般都在40%,这个权重对于每年复试后综合成绩的排名影响会比较大,按照mpa联考复试1分等于初试3分的规则,联考笔试成绩假如有15分差异的两个考生,复试成绩…

Docker 部署本地爬虫项目到服务器

笔记:一直想写一篇博客的,那就趁着周末闲暇时光记录一下。 目录 一、前提准备 二、Docker部署爬虫示例 整体梳理 1、打包构建本地项目镜像 2、在 hub 网站上 创建一个仓库。 3、将本地镜像与hub上的仓库打上标签 4、确保已登录 Dockerhub 账号 …

一键掌握多家快递信息,快递批量查询高手软件助你高效管理物流

一键掌握多家快递信息,快递批量查询高手软件助你高效管理物流 在当今这个高度信息化的时代,快递行业的发展可谓日新月异。随着网购的普及,如何高效、准确地掌握多家快递公司的信息,成为了很多消费者和管理者面临的难题。为了解决…

fastadmin笔记,fastadmin表格功能

fastadmin笔记 官方文档请到: https://ask.fastadmin.net/article/323.html自行查阅 1、默认有个切换功能。 浏览模式可以切换卡片视图和表格视图两种模式,如果不需要此功能 在该控制器对应的js 文件中添加上showToggle:false即可。 2、导出功能 …

谷歌浏览器误代码STATUS_INVALID_IMAGE_HASH如何一行代码解决

一、直入主题: 1.谷歌浏览器突然就不能用了,如下图: 2.如何解决 --test-type -no-sandbox 卸载浏览器重装还是一样的问题,目前我们的谷歌浏览器版本号:Chrome 已是最新版本 版本 118.0.5993.89(正式版本&a…

2023年中职组“网络安全”赛项 云南省竞赛任务书

2023年中职组“网络安全”赛项 云南省竞赛任务书 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控 A-5 服务加固 A-6 防火墙策…

同步网盘选择指南:哪个同步网盘更好用?

同步盘是当下热门的云存储服务之一,它可以将您的文件在不同设备之间进行同步,使您可以随时随地访问和共享您的文件,因此受到了许多用户的喜爱。 一、什么是同步盘 首先到底什么是同步盘?同步盘是指一种云存储服务,它…

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元回归预测。基于贝…