如何使用Synchronizer Token Pattern来防止CSRF安全?

Jul*_*iet 23 javascript security csrf web

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

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

  • fakebank.com/withdrawForm.html - 显示提款单的GET请求
  • fakebank.com/doWithdraw - 发送到此网址进行撤销

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

假设我们实现了一个同步器令牌模式,它将嵌入一个密码fakebank.com/withdrawForm.html.不能maliciousSite.com只是欺骗该表单的GET请求,解析html结果,获取令牌,然后使用该令牌创建POST请求?

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

Fre*_*Ben 22

这是安全的原因,并且maliciousSite.com不能简单地做一个GET,窃取令牌,然后做一个POST是请求是由用户的浏览器完成的,而不是由服务器完成的maliciousSite.com.返回的所有数据fakebank.com都返回给用户的浏览器,而不是返回服务器maliciousSite.com.如果maliciousSite.com执行GET以检索令牌,则它将是与发布给用户的令牌不同的令牌. 由于相同的域限制,maliciousSite.com无法将此cookie设置为要提交的用户浏览器fakebank.com.

CSRF POST攻击的工作原理是欺骗用户的浏览器fakebank.com/withdrawForm.html直接使用正确形成的POST请求.服务器fakebank.com愉快地执行请求POST,从而使用POST正文中提供的参数(包括属于被放置在那里的攻击者的目标帐户)来转移资金maliciousSite.com.服务器at maliciousSite.com不需要查看返回的数据,因为已经采取了行动(除非fakebank.com使用这些CSRF令牌,maliciousSite.com除非以某种方式泄露,否则无法知道这些令牌.它不能要求它) .如果fakebank.com使用CSRF令牌,maliciousSite.com则会提交POST缺少令牌的请求,从而表明正在进行的潜在CSRF攻击.

此方法的漏洞包括使用CSRF令牌,该令牌未保密,并以某种方式泄露.此外,如果CSRF令牌不够随机,那么maliciousSite.com可能能够猜测它.此外,如果浏览器执行相同域策略存在缺陷,则可以利用此漏洞.一般来说,现代浏览器不容易受此影响.

如果这是一个不充分的解释,请告诉我,我会尝试为你说清楚一点.

  • @SLC如果您可以将脚本代码注入用户的浏览器,那么您不再是在谈论CSRF而是在谈论XSS.此时,CSRF令牌不仅毫无价值,而且至少是您的问题. (11认同)
  • 如果您能够将javascript注入用户的浏览器以启动攻击,那么只需嵌入一些jquery来执行GET请求,解析它,然后在同一个`<script>`标记内执行POST ? (3认同)