springsecurity为什么说使用JWT就可以disable csrf

Cross-Site Request Forgery (CSRF) 是一种攻击,它利用了用户在浏览器中对特定网站的登录状态。攻击者可以在他们控制的网站上构造一个请求,当用户访问这个网站时,这个请求会在用户的浏览器中执行,并带有用户对目标网站的凭证(例如,cookies)。如果目标网站没有合适的防护措施,攻击者就可以在用户不知情的情况下以用户的身份执行操作。

Spring Security 默认启用了 CSRF 保护,它通过一个 CSRF token 来确保只有知道这个 token 的请求才能执行改变状态的操作。这个 CSRF token 会在每个 session 中生成,并在每次请求中验证。

然而,当你使用 JWT 进行认证时,你可能会选择不使用 session,因为 JWT 是无状态的,它包含了所有必要的用户信息。在这种情况下,没有 session,也就没有地方存储 CSRF token,所以 CSRF 保护实际上是无效的。

此外,JWT 通常不会存储在 cookie 中,而是存储在前端的本地存储中,然后在每个请求的 Authorization 头中发送。因为 CSRF 攻击是通过 cookie 来携带用户凭证的,所以如果你不使用 cookie 存储用户凭证,你就不会受到 CSRF 攻击的影响。

因此,当使用 JWT 进行认证时,你通常可以关闭 Spring Security 的 CSRF 保护。但是,请注意,你应该仍然防范其他的安全威胁,例如 Cross-Site Scripting (XSS) 攻击,它可以用来窃取前端存储中的 JWT。

在使用 JWT 的情况下,应对 CSRF 的最佳做法主要取决于你如何存储和传输 JWT

  1. 不存储 JWT 在 Cookie 中: 如果你将 JWT 存储在前端的一个地方(例如,localStorage 或 sessionStorage),并且在每次请求时手动把 JWT 添加到 Authorization header,那么你的应用本质上就是免疫于 CSRF 攻击的。这是因为 CSRF 攻击是通过利用浏览器会自动发送 Cookie 的特性,而浏览器不会自动添加 JWT 到 Authorization header。

  2. 存储 JWT 在 Cookie 中: 如果你选择将 JWT 存储在 Cookie 中,那么你的应用就有可能受到 CSRF 攻击。在这种情况下,你可以使用 Double Submit Cookie 方案来防止 CSRF 攻击。这个方案的实现方法是,在设置 JWT 的同时,设置一个额外的 CSRF Token Cookie,并将这个 CSRF Token 也返回给前端。然后,前端在每次请求时,除了浏览器自动发送的 JWT Cookie,还要手动把 CSRF Token 添加到请求的 headers 或 body。服务器在接收到请求时会比较 CSRF Token Cookie 和请求的 headers 或 body 中的 CSRF Token 是否一致,从而防止 CSRF 攻击。

无论你选择哪种方法,都应当注意防止其他类型的攻击,例如 Cross-Site Scripting (XSS) 攻击和 Man-in-the-Middle (MITM) 攻击。例如,你应当使用 HTTPS 来防止 MITM 攻击,使用适当的策略和技术(例如,Content Security Policy,对用户输入的严格检查和清理)来防止 XSS 攻击。

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

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

相关文章

更简单的Redux工具 Toolkit

1 安装 npm install reduxjs/toolkit2 创建store目录 创建store文件夹,里面包含入口文件index.jsx,以及自定义的reduces方法main.jsx的slices文件夹,其中main1.jsx、main2.jsx表示每一个相对独立的reduces数据操作集 store ***slices *****…

基于Browscap对浏览器工具类优化

项目背景 原有的启动平台公共组件库comm-util的浏览器工具类BrowserUtils是基于UserAgentUtils的,但是该项目最后一个版本发布于 2018/01/24,之至今日23年底,已有5年没有维护更新,会造成最新版本的部分浏览器不能正确获取到浏览器…

使用python操作excel文档

导入xlsxwriter包 python轻量化的语言,用来操作文档简直易如反掌,首先你需要导入的是import xlsxwriter包,他包括了操作文档所需要的全部工具方法,你只需要调用就好了。 操作excel指南 首先你需要创建一个文件xlsxwriter.Workb…

http与apache

目录 1.http相关概念 2.http请求的完整过程 3.访问浏览器背后的原理过程 4.动态页面与静态页面区别 静态页面: 动态页面: 5.http协议版本 6.http请求方法 7.HTTP协议报文格式 8.http响应状态码 1xx:提示信息 2xx:成功…

代码随想录算法训练营第四十四天| 518 零钱兑换 || 377 组合总和 Ⅳ

目录 518 零钱兑换 || 377 组合总和 Ⅳ 518 零钱兑换 || 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 class Solution { public:int change(int amount, vector<int>& coins) {vector<int> f(amount 10);//拼凑成总金额为i的总情况…

CPU密集型和IO密集型初学习

目录 1、CPU密集型 2、IO密集型 3、CPU密集型和IO密集型的区别 4、CPU密集型和IO密集型对CPU内核之间的关系 5、核心线程数计算公式 5、扩展&#xff1a;进程和线程 小结 1、CPU密集型 CPU密集型是指计算机程序或任务在执行过程中主要依赖于中央处理器&#xff08;CPU&…

IOday5作业

使用两个线程完成两个文件的拷贝&#xff0c;分支线程1完成前一半内容拷贝&#xff0c;分支线程2完成后一半内容的拷贝&#xff0c;主线程完成资源的回收 #include<myhead.h> //定义结构体 struct file {const char* srcfile;//背拷贝文件路径const char* destfile;//拷…

浏览器的缓存策略

浏览器缓存的策略主要分为两种&#xff1a;过期机制和验证机制。 过期机制&#xff1a;是指浏览器根据资源的过期时间&#xff0c;判断是否可以直接使用缓存中的副本&#xff0c;而无需向服务器发起请求。过期时间可以通过以下两种方式设置&#xff1a; Cache-Control&#xf…

C++ STL容器与常用库函数

STL是提高C编写效率的一个利器 STL容器&#xff1a; 一、#include <vector> 英文翻译&#xff1a;vector &#xff1a;向量 vector是变长数组(动态变化)&#xff0c;支持随机访问&#xff0c;不支持在任意位置O(1)插入。为了保证效率&#xff0c;元素的增删一般应该在末尾…

【设计模式-3.1】结构型——外观模式

说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;外观模式&#xff1b; 亲手下厨还是点外卖&#xff1f; 外观模式属于结构型的设计模式&#xff0c;关注类或对象的组合&#xff0c;所呈现出来的结构。以吃饭为例&#xff0c;在介绍外观模式之前&#xff0…

你们如何看待华为的鸿蒙ArkTS语言?

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以以更简洁、…

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 26 章:让 ChatGPT 成为你自己的提示工程师

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南—第 26 章&#xff1a;让 ChatGPT 成为你自己的提示工程师 要让 ChatGPT 成为你自己的提示工程师&#xff0c;你需要与 ChatGPT 发起对话。你可以使用下面提供的提示示例&#xff0c;内容如下&#xff1a; 步…

画好一张规范的原理图,这些点你可要注意了!

不光是代码有可读性的说法&#xff0c;原理图也有。很多时候原理图不仅仅是给自己看的&#xff0c;也会给其它人看&#xff0c;如果可读性差&#xff0c;会带来一系列沟通问题。所以&#xff0c;要养成良好习惯&#xff0c;做个规范的原理图。此外&#xff0c;一个优秀的原理图…

【云原生-K8s】镜像漏洞安全扫描工具Trivy部署及使用

基础介绍基础描述Trivy特点 部署在线下载百度网盘下载安装 使用扫描nginx镜像扫描结果解析json格式输出 总结 基础介绍 基础描述 Trivy是一个开源的容器镜像漏洞扫描器&#xff0c;可以扫描常见的操作系统和应用程序依赖项的漏洞。它可以与Docker和Kubernetes集成&#xff0c;…

temu数据如何看:多多情报通助力商家数据选品

拼多多作为中国最大的农村电商平台&#xff0c;吸引了大量的商家和消费者。对于拼多多商家来说&#xff0c;了解市场趋势、优化产品和店铺运营、了解竞争对手等方面的数据分析至关重要。为了满足商家的需求&#xff0c;拼多多推出了多多情报通&#xff08;原名&#xff1a;多多…

批量AI写作生成器有哪些?免费的批量AI写作生成器

当今信息爆炸的时代&#xff0c;文案需求量庞大&#xff0c;传统文案写作已无法满足快速迭代的需求。批量AI写作生成器应运而生&#xff0c;成为许多行业的得力助手。在众多AI写作工具中&#xff0c;147原创助手以其批量AI写作功能和在各大平台显示原创首发的特性脱颖而出。本文…

低代码:美味膳食或垃圾食品?

一、什么是低代码 低代码开发是一种软件开发方法&#xff0c;旨在通过最小化手动编码的需求&#xff0c;使应用程序的开发变得更加快速和简单。它通常涉及使用图形界面和可视化工具&#xff0c;而不是传统的编码方法&#xff0c;以减少开发过程中的繁琐步骤。 二、低代码的优…

Metasploit在红队作战中的应用

预计更新 第一章 Metasploit的使用和配置 1.1 安装和配置Metasploit 1.2 Metasploit的基础命令和选项 1.3 高级选项和配置 第二章 渗透测试的漏洞利用和攻击方法 1.1 渗透测试中常见的漏洞类型和利用方法 1.2 Metasploit的漏洞利用模块和选项 1.3 模块编写和自定义 第三章 Me…