Spring Security中防护CSRF功能详解

 更新时间:2023年01月20日 14:11:48   作者:爱上口袋的天空  
这篇文章主要介绍了Spring Security中防护CSRF功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

CSRF是什么?

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

CSRF可以做什么?

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。

CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…

造成的问题包括:个人隐私泄露以及财产安全。

CSRF的原理

下图简单阐述了CSRF攻击的思想:

在这里插入图片描述

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

  • 1.登录受信任网站A,并在本地生成Cookie。
  • 2.在不登出A的情况下,访问危险网站B。 

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。

是的,确实如此,但你不能保证以下情况不会发生:

  • 1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
  • 2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了…)
  • 3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

Spring Security解决方案

将配置类中下面这段代码注释掉:

.and().csrf().disable(); //关闭csrf防护

然后,在登录页面添加一个隐藏域:

<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />

Spring Security实现防护csrf的原理

spring security在认证之后会生成一个csrfToken保存到HttpSession或者Cookie中。

之后每次请求到来时,从请求中提取csrfToken,和保存的csrfToken作比较,进而判断当前请求是否合法。主要通过CsrfFilter过滤器来完成。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅谈JAVA 责任链模式

    浅谈JAVA 责任链模式

    这篇文章主要介绍了JAVA 责任链模式的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java实现多个wav文件合成一个的方法示例

    Java实现多个wav文件合成一个的方法示例

    这篇文章主要介绍了Java实现多个wav文件合成一个的方法,涉及java文件流读写、编码转换、解析等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Java后端SSM框架图片上传功能实现方法解析

    Java后端SSM框架图片上传功能实现方法解析

    这篇文章主要介绍了Java后端SSM框架图片上传功能实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 浅谈java中String与StringBuffer的不同

    浅谈java中String与StringBuffer的不同

    String在栈中,StringBuffer在堆中!所以String是不可变的,数据是共享的。StringBuffer都是独占的,是可变的(因为每次都是创建新的对象!)
    2015-11-11
  • Java递归调用如何实现数字的逆序输出方式

    Java递归调用如何实现数字的逆序输出方式

    这篇文章主要介绍了Java递归调用如何实现数字的逆序输出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • nohup运行Java tail查看日志方式

    nohup运行Java tail查看日志方式

    nohup命令允许程序在用户退出账户或关闭终端后继续运行,常与"&"结合使用以实现程序的后台执行,配合重定向操作,nohup可以将程序输出保存到日志文件中,如nohup java -jar XXX.jar &> myout.log &,此外,tail命令可用于实时监控日志文件的变化
    2024-09-09
  • SpringBoot从0到1整合银联无跳转支付功能附源码

    SpringBoot从0到1整合银联无跳转支付功能附源码

    这篇文章主要介绍了SpringBoot从0到1整合银联无跳转功能支付附源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    通常来讲,重构是指不改变功能的情况下优化代码,但本文所说的重构也包括了添加功能。这篇文章主要介绍了重构Mybatis与Spring集成的SqlSessionFactoryBean(上)的相关资料,需要的朋友可以参考下
    2016-11-11
  • Springboot接收 Form 表单数据的示例详解

    Springboot接收 Form 表单数据的示例详解

    这篇文章主要介绍了Springboot接收 Form 表单数据的实例代码,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • java easyUI实现自定义网格视图实例代码

    java easyUI实现自定义网格视图实例代码

    这篇文章主要给大家介绍了关于java easyUI实现自定义网格视图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10

最新评论