如何使用同步令牌模式来防止CSRF安全

How is using Synchronizer Token Pattern to prevent CSRF safe?

本文关键字:CSRF 安全 模式 何使用 同步 令牌      更新时间:2023-09-26

我一直在阅读关于使用同步器令牌模式来防止CSRF (CSRF的意思是跨站点请求伪造),我不明白它实际上是如何安全的。

假设我有一个假的银行网站fakebank.com,有两个url:

  • fakebank.com/withdrawForm.html—显示取款表单的GET请求
  • fakebank.com/doWithdraw - POST到此url进行提取

我对安全漏洞的理解是maliciousSite.com可以欺骗对fakebank.com/doWithdraw的POST请求,如果您当前登录到fakebank,则POST将成功。

假设我们实现了一个同步令牌模式,它将在fakebank.com/withdrawForm.html上嵌入一个秘密代码。不能maliciousSite.com只是欺骗GET请求的形式,解析html的结果,获得令牌,然后创建与令牌POST请求?

这是假设fakebank.com没有检查HTTP Referrer或Origin或maliciousSite.com成功欺骗Referrer/Origin是fakebank.com。

这是安全的,maliciousSite.com不能简单地执行GET,窃取令牌,然后执行POST的原因是请求是由用户的浏览器完成的,而不是由maliciousSite.com的服务器完成的。从fakebank.com返回的所有数据都返回到用户的浏览器,而不是返回到maliciousSite.com的服务器。如果maliciousSite.com确实执行GET来检索令牌,那么它将是与发给用户的令牌不同的令牌。由于相同域的限制,maliciousSite.com不能将此cookie设置为提交给fakebank.com的用户浏览器。

CSRF POST攻击的工作原理是欺骗用户的浏览器使用正确格式的POST请求直接请求fakebank.com/withdrawForm.htmlfakebank.com的服务器愉快地执行请求的POST,从而使用POST主体中提供的参数(其中包括由maliciousSite.com放置的属于攻击者的目标账户)转移资金。maliciousSite.com的服务器不需要看到返回的数据,因为已经采取了操作(除非fakebank.com使用这些CSRF令牌,maliciousSite.com不可能知道这些令牌,除非以某种方式泄露。)它不能要求它)。如果fakebank.com正在使用CSRF令牌,那么maliciousSite.com将提交缺少令牌的POST请求,从而表明正在进行潜在的CSRF攻击。

该方法的漏洞包括使用未充分保密的CSRF令牌,并以某种方式泄露。另外,如果CSRF令牌不够随机,那么maliciousSite.com可能能够猜出它。此外,如果浏览器对相同域策略的执行存在弱点,这可能会被利用。一般来说,现代浏览器不会受此影响。

如果这是一个不充分的解释,请让我知道,我会努力为你表达得更好。

这正是问题的关键。浏览器中的同源策略不允许对其他站点的GET请求。因此,任何站点都不能仅在浏览器中使用javascript从另一个站点获取CSRF令牌。