什么是CSRF攻击?了解CSRF攻击的最佳方法是看一个具体示例 。
文章插图
例子假设您银行的网站提供了一种表格,该表格允许将资金从当前登录的用户转移到另一个银行帐户 。
例如,转账表单可能如下所示:
<form method="post" action="/transfer"><input type="text" name="amount"/><input type="text" name="routingNumber"/><input type="text" name="account"/><input type="submit" value=https://www.isolves.com/it/wl/aq/2021-01-15/"Transfer"/>
http 的响请求可能如下:POST /transfer HTTP/1.1Host: bank.example.comCookie: JSESSIONID=randomidContent-Type: Application/x-www-form-urlencodedamount=100.00&routingNumber=1234&account=9876
现在,假装您对银行的网站进行身份验证,然后无需注销即可访问一个邪恶的网站 。恶意网站包含具有以下格式的html页面:
<form method="post" action="https://bank.example.com/transfer"><input type="hidden" name="amount" value=https://www.isolves.com/it/wl/aq/2021-01-15/"100.00"/>
您想赢钱,因此单击“提交”按钮 。在此过程中,您无意中将 $100 转让给了恶意用户 。
发生这种情况的原因是,尽管恶意网站无法看到您的cookie,但与您的银行关联的cookie仍与请求一起发送 。
最糟糕的是,使用JAVAScript可以使整个过程自动化 。这意味着您甚至不需要单击该按钮 。
此外,在访问受XSS攻击的诚实站点时,也很容易发生这种情况 。
那么,我们如何保护用户免受此类攻击呢?
【Spring Security 如何预防CSRF跨域攻击?】web 安全系列-02-XSS 跨站脚本攻击防范CSRF攻击发生CSRF攻击的原因是受害者网站的HTTP请求与攻击者网站的请求完全相同 。
这意味着无法拒绝来自邪恶网站的请求,也不允许来自银行网站的请求 。
为了防御CSRF攻击,我们需要确保恶意站点无法提供请求中的某些内容,以便我们区分这两个请求 。
Spring提供了两种机制来防御CSRF攻击:
- 同步器令牌模式
- 在会话Cookie上指定SameSite属性
这意味着使用HTTP方法GET,HEAD,OPTIONS和TRACE进行的请求不应更改应用程序的状态 。
idempotent 幂等性防止重复提交同步器令牌模式抵御CSRF攻击的最主要,最全面的方法是使用同步器令牌模式 。
文章插图
解决方案该解决方案是为了确保每个HTTP请求除了我们的会话cookie之外,还必须在HTTP请求中提供一个安全的,随机生成的值,称为CSRF令牌 。
提交HTTP请求时,服务器必须查找预期的CSRF令牌,并将其与HTTP请求中的实际CSRF令牌进行比较 。如果值不匹配,则应拒绝HTTP请求 。
这项工作的关键是,实际的CSRF令牌应该位于浏览器不会自动包含的HTTP请求的一部分中 。
ps: 这里可以发现防止重复提交和思想非常类似,甚至是验证码也是类似的思路 。不过要确保这个信息不会被自动放到请求之中 。
例如,在HTTP参数或HTTP标头中要求实际的CSRF令牌将防止CSRF攻击 。在cookie中要求实际CSRF令牌不起作用,因为浏览器会自动将cookie包含在HTTP请求中 。
我们可以放宽期望,仅对每个更新应用程序状态的HTTP请求仅要求实际的CSRF令牌 。
为此,我们的应用程序必须确保安全的HTTP方法是幂等的 。因为我们希望允许使用外部站点的链接来链接到我们的网站,所以这提高了可用性 。
此外,我们不想在HTTP GET中包含随机令牌,因为这可能导致令牌泄漏 。
让我们看一下使用同步令牌模式时示例将如何变化 。
假设实际的CSRF令牌必须位于名为_csrf的HTTP参数中 。
我们应用程序的转帐表单如下:
推荐阅读
- Spring Cloud Eureka 详解
- 绿茶如何挑选,如何制作苦瓜茶
- 电动汽车如何保养
- mac删除后的文件恢复?mac误删的文件如何恢复_1
- windows10如何关闭windows安全中心,win10关闭Windows安全中心-
- 海瑞做了什么贡献 如何评价海瑞这个人
- 铜器鉴定方法 收藏铜器如何保存
- 龙眼菩提如何收藏挑选
- ipad如何更新到10以上版本?ipad能升级到10以上的有哪些_1
- jpg如何压缩图片大小-jpg图片太大怎么批量压缩-