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的四种随机数生成方式的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2022-07-07
  • java实用型-高并发下RestTemplate的正确使用说明

    java实用型-高并发下RestTemplate的正确使用说明

    这篇文章主要介绍了java实用型-高并发下RestTemplate的正确使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java concurrency线程池之线程池原理(四)_动力节点Java学院整理

    Java concurrency线程池之线程池原理(四)_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java concurrency线程池之线程池原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 解决mybatis where-if中if不能识别大写AND,OR的问题

    解决mybatis where-if中if不能识别大写AND,OR的问题

    这篇文章主要介绍了解决mybatis where-if中if不能识别大写AND,OR的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot实现发送邮件任务

    SpringBoot实现发送邮件任务

    这篇文章主要为大家详细介绍了SpringBoot实现发送邮件任务,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • default怎么修饰接口中的方法详解

    default怎么修饰接口中的方法详解

    今天给各位小伙伴们总结一下default怎么修饰接口中的方法,文中有非常详细的图文解说.对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Java 程序内部是如何执行的?

    Java 程序内部是如何执行的?

    这篇文章主要介绍了Java 程序内部是如何执行的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • MyBatis生成UUID的实现

    MyBatis生成UUID的实现

    这篇文章主要介绍了MyBatis生成UUID的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 一次mybatis连接查询遇到的坑实战记录

    一次mybatis连接查询遇到的坑实战记录

    这篇文章主要给大家介绍了关于一次mybatis连接查询遇到的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java实现新浪微博Oauth接口发送图片和文字的方法

    java实现新浪微博Oauth接口发送图片和文字的方法

    这篇文章主要介绍了java实现新浪微博Oauth接口发送图片和文字的方法,涉及java调用新浪微博Oauth接口的使用技巧,具有一定参考接借鉴价值,需要的朋友可以参考下
    2015-07-07

最新评论