springsecurity-CSRF
springsecurity的防CSRF的功能是开启的,一般也建议开启。
CSRF的原理
CSRF攻击原理比较简单,例如Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;并且,此后从用户浏览器发送请求给网站A时都会默认带上用户的Cookie信息;
2)用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
3)网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
4)浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求的最终发起者其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
简单来说,CSRF必须经过两个步骤:
1、用户访问可信任站点A,并产生了相关的cookie;
2、用户在访问A站点时没有退出,同时访问了危险站点B。
先讲一下,springsecurity的防CSRF的基本原理:
1.一般用户向服务器请求登录,服务器会返回一个登录的表单页面,实际上这时候服务器就已经保存了一串随机生成的字符串A
2.返回给用户的登录表单页面中,有一个隐藏域,值就是字符串A
3.当用户提交表单时,隐藏域中的字符串A和服务器上的字符串A比较,一般来说都是相同的,此时服务器就认为是用户本人操作
这里的关键实际上就是这一串字符串A了,在请求登录页面的时候就已经保存一份在服务器了,然后给用户一份。一些恶意网站可以拿到用户在服务器认证过的cookie,但是拿不到这个这个字符串A
如果csrf功能开启了,那么在表单页面中,需要加上下面一段的(前提得有thymeleaf的jar包):
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~