序言
前面我们学习了 spring security 与 springmvc 的整合入门教程。
spring secutity整合springboot入门
spring security 使用 maven 导入汇总
spring security 业界标准加密策略源码详解
这一节我们来学习一下 spring security 是如何预防 CSRF 攻击的。
拓展阅读
web 安全系列-04-CSRF 跨站请求伪造
什么是CSRF攻击?
了解CSRF攻击的最佳方法是看一个具体示例。
例子
假设您银行的网站提供了一种表格,该表格允许将资金从当前登录的用户转移到另一个银行帐户。
例如,转账表单可能如下所示:
http 的响请求可能如下:
POST /transfer HTTP/1.1Host: bank.example.comCookie: JSESSIONID=randomidContent-Type: application/x-www-form-urlencodedamount=100.00&routingNumber=1234&account=9876
现在,假装您对银行的网站进行身份验证,然后无需注销即可访问一个邪恶的网站。
恶意网站包含具有以下格式的HTML页面:
您想赢钱,因此单击“提交”按钮。
在此过程中,您无意中将 $100 转让给了恶意用户。
发生这种情况的原因是,尽管恶意网站无法看到您的cookie,但与您的银行关联的cookie仍与请求一起发送。
最糟糕的是,使用JavaScript可以使整个过程自动化。 这意味着您甚至不需要单击该按钮。
此外,在访问受XSS攻击的诚实站点时,也很容易发生这种情况。
那么,我们如何保护用户免受此类攻击呢?
web 安全系列-02-XSS 跨站脚本攻击
防范CSRF攻击
发生CSRF攻击的原因是受害者网站的HTTP请求与攻击者网站的请求完全相同。
这意味着无法拒绝来自邪恶网站的请求,也不允许来自银行网站的请求。
为了防御CSRF攻击,我们需要确保恶意站点无法提供请求中的某些内容,以便我们区分这两个请求。
Spring提供了两种机制来防御CSRF攻击:
- 同步器令牌模式
- 在会话Cookie上指定SameSi