30

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

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

  • fakebank.com/withdrawForm.html- 显示提款表格的 GET 请求
  • fakebank.com/doWithdraw- 发布到此 url 以进行提款

我对安全漏洞的理解是,它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。

4

2 回答 2

28

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

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

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

如果这是一个不充分的解释,请告诉我,我会尝试为您更好地表达它。

于 2013-04-17T02:25:52.250 回答
2

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

于 2013-04-17T01:13:42.780 回答