[英]How is using Synchronizer Token Pattern to prevent CSRF safe?
我一直在阅读使用同步器令牌模式来防止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。
这是安全的原因,并且maliciousSite.com
不能简单地进行GET
,窃取令牌,然后执行POST
是请求由用户的浏览器完成,而不是由maliciousSite.com
的服务器完成。 从fakebank.com
返回的所有数据都将返回给用户的浏览器 ,而不是maliciousSite.com
上的服务器。 如果maliciousSite.com
执行GET以检索令牌,则它将与发布给用户的令牌不同。 由于相同的域名限制, maliciousSite.com
无法将此cookie设置为用户的浏览器提交到fakebank.com
。
CSRF POST
攻击通过欺骗用户的浏览器直接使用正确形成的POST
请求来请求fakebank.com/withdrawForm.html
。 fakebank.com
的服务器愉快地执行请求的POST
,从而使用POST
正文中提供的参数(包括属于由maliciousSite.com
放置的攻击者的目标帐户)来转移资金。 maliciousSite.com
上的服务器不需要查看返回的数据,因为已采取行动(除非fakebank.com
使用这些CSRF令牌, maliciousSite.com
不可能知道,除非以某种方式泄露它不能要求它。 如果fakebank.com
使用CSRF令牌,那么maliciousSite.com
将提交缺少令牌的POST
请求,从而表明正在进行的潜在CSRF攻击。
此方法的漏洞包括使用CSRF令牌,该令牌未保密,并以某种方式泄露。 此外,如果CSRF令牌不够随机,那么maliciousSite.com
可能会猜测它。 此外,如果浏览器执行相同域策略存在缺陷,则可以利用此漏洞。 一般来说,现代浏览器不容易受此影响。
如果这是一个不充分的解释,请告诉我,我会尝试为您说明一点。
这就是重点。 浏览器中的同源策略不允许向其他站点发出GET请求。 因此,没有站点可以在浏览器中使用Javascipt从另一个站点获取CSRF令牌。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.