Spring Security中防护CSRF功能详解
爱上口袋的天空 人气:0CSRF是什么?
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过滤器来完成。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容