我一直在阅读使用同步器令牌模式来防止CSRF(CSRF意味着跨站点请求伪造。),我不明白它实际上是如何安全的。
假设我有一个虚假的银行网站fakebank.com,有两个网址:
fakebank.com/withdrawForm.html
- 显示提款单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
成功欺骗推荐人/来源是fakebank.com。
答案 0 :(得分: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
所在的攻击者的目标帐户转移资金。 1}})。 maliciousSite.com
处的服务器不需要查看返回的数据,因为已采取操作(除非fakebank.com
使用这些CSRF令牌,maliciousSite.com
除非它{...}}已经在某种程度上被泄露了。它不能要求它。如果fakebank.com
正在使用CSRF令牌,则maliciousSite.com
将提交缺少令牌的POST
请求,从而表明正在进行的潜在CSRF攻击。
此方法的漏洞包括使用未充分保密且以某种方式泄露的CSRF令牌。此外,如果CSRF令牌不够随机,那么maliciousSite.com
可能会猜测它。此外,如果浏览器执行相同域策略存在缺陷,则可以利用此漏洞。一般来说,现代浏览器不容易受此影响。
如果这是一个不充分的解释,请告诉我,我会尝试为你说清楚一点。
答案 1 :(得分:3)
这就是重点。浏览器中的Same Origin Policy不允许 GET 请求到其他网站。因此,没有站点可以在浏览器中使用Javascipt从另一个站点获取CSRF令牌。