Spring Security 如何预防CSRF跨域攻击?( 三 )

这将产生以下JSON结构
{ "amount": 100,"routingNumber": "evilsRoutingNumber","account": "evilsAccountNumber","ignore_me": "=test"}如果应用程序未验证Content-Type,则该应用程序将被暴露 。
根据设置的不同,仍然可以通过更新URL后缀以.json结尾的方式来利用验证Content-Type的Spring MVC应用程序,如下所示:
<form action="https://bank.example.com/transfer.json" method="post" enctype="text/plain">    <input name='{"amount":100,"routingNumber":"evilsRoutingNumber","account":"evilsAccountNumber", "ignore_me":"' value=https://www.isolves.com/it/wl/aq/2021-01-15/'test"}' type='hidden'> CSRF和无状态浏览器应用程序如果我的应用程序是无状态的怎么办?
这并不一定意味着您受到保护 。
实际上,如果用户不需要针对给定请求在Web浏览器中执行任何操作,则他们可能仍然容易受到CSRF攻击 。
例如,考虑一个使用自定义cookie而不是JSESSIONID的应用程序,其中包含其中的所有状态用于身份验证 。
进行CSRF攻击后,自定义cookie将与请求一起发送,其方式与在前面的示例中发送JSESSIONID cookie相同 。
此应用程序容易受到CSRF攻击 。
使用基本身份验证的应用程序也容易受到CSRF攻击 。
该应用程序容易受到攻击,因为浏览器将以与前面示例中发送JSESSIONID cookie相同的方式在任何请求中自动包含用户名和密码 。
CSRF注意事项实施针对CSRF攻击的防护时,需要考虑一些特殊注意事项 。
登录为了防止伪造登录请求,应保护HTTP请求中的登录免受CSRF攻击 。
必须防止伪造登录请求,以使恶意用户无法读取受害者的敏感信息 。
攻击执行如下:

  1. 恶意用户使用恶意用户的凭据执行CSRF登录 。现在,将受害者验证为恶意用户 。
  2. 然后,恶意用户欺骗受害者访问受感染的网站并输入敏感信息
  3. 该信息与恶意用户的帐户相关联,因此恶意用户可以使用自己的凭据登录并查看vicitim的敏感信息
确保保护HTTP请求不受CSRF攻击的可能原因是,用户可能会遇到会话超时,从而导致请求被拒绝 。会话超时对于不需要登录就需要会话的用户来说是令人惊讶的 。
登出为了防止伪造注销请求,应该保护注销HTTP请求免受CSRF攻击 。
必须防止伪造注销请求,以便恶意用户无法读取受害者的敏感信息 。
确保注销HTTP请求免受CSRF攻击的可能麻烦在于,用户可能会遇到会话超时,从而导致请求被拒绝 。
会话超时对于不希望需要会话才能注销的用户来说是令人惊讶的
CSRF和会话超时通常,预期的CSRF令牌存储在会话中 。这意味着,会话期满后,服务器将不会找到预期的CSRF令牌并拒绝HTTP请求 。
有很多选项可以解决超时问题,每个选项都需要权衡取舍 。
减轻超时的最佳方法是使用JavaScript在表单提交时请求CSRF令牌 。然后使用CSRF令牌更新该表单并提交 。
另一个选择是使用一些JavaScript,让用户知道他们的会话即将到期 。用户可以单击按钮以继续并刷新会话 。
最后,预期的CSRF令牌可以存储在cookie中 。这允许预期的CSRF令牌超过会话寿命 。
有人可能会问为什么默认情况下预期的CSRF令牌没有存储在Cookie中 。
这是因为存在已知的漏洞利用,其中另一个域可以设置标头(例如,用于指定cookie) 。这与出现标题X-Requested-With时Ruby on Rails不再跳过CSRF检查的原因相同 。请参阅此webappsec.org线程以获取有关如何执行漏洞利用的详细信息 。
另一个缺点是,通过删除状态(即超时),您将失去在令牌遭到破坏时强制使令牌无效的能力 。
分段(文件上传)保护分段请求(文件上传)免受CSRF攻击会导致鸡和蛋的问题 。
为了防止发生CSRF攻击,必须读取HTTP请求的正文以获得实际的CSRF令牌 。
但是,读取正文表示文件将被上传,这意味着外部站点可以上传文件 。
将CSRF保护与 multipart/form-data 一起使用有两种选择 。
每个选项都有其取舍 。
  • 将CSRF令牌放入 body
  • 将CSRF令牌放入URL
在将Spring Security的CSRF保护与分段文件上传集成之前,请确保您可以先上传而无需CSRF保护 。


推荐阅读