如何使用同步标记模式,以防止CSRF安全吗?(How is using Synchronizer T

2019-08-31 08:44发布

我一直在阅读有关使用同步标记模式,以防止CSRF攻击(CSRF意味着跨站请求伪造),我不知道它是如何真正安全的。

比方说,我有两个URL假银行网站fakebank.com:

  • fakebank.com/withdrawForm.html -这显示取钱形式的GET请求
  • fakebank.com/doWithdraw - POST到这个网址做退出

我的安全漏洞的理解是, maliciousSite.com可以欺骗一个POST请求fakebank.com/doWithdraw ,如果您目前在以fakebank登录状态,则POST会成功。

比方说,我们实现一个同步标记模式,这将嵌入一个秘密代码fakebank.com/withdrawForm.html 。 不能maliciousSite.com只是恶搞为形式的GET请求,解析HTML结果,获得令牌,然后创建与该令牌POST请求?

这是假设fakebank.com不检查HTTP推荐或原产地或maliciousSite.com成功地欺骗了介绍人/产地是fakebank.com。

Answer 1:

之所以这样是安全的, 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 )。 在服务器maliciousSite.com并不需要看到返回的数据,因为已经采取行动(除非fakebank.com使用这些CSRF令牌,其中maliciousSite.com不可能知道,除非它以某种方式被泄露它不能要求它)。 如果fakebank.com使用CSRF令牌,然后maliciousSite.com将提交一个POST是缺少凭证要求,从而表明正在进行潜在的CSRF攻击。

这种方法的漏洞包括使用CSRF令牌未保持足够的秘密,并以某种方式被泄露。 此外,如果CSRF令牌是不够随机的,那么maliciousSite.com或许能猜到它。 此外,如果在同一个域策略的浏览器的执法虚弱,这可能被利用。 一般来说,现代的浏览器不容易受到此。

请让我知道这是一个不足的解释,我会尝试一点点更好地表达它。



Answer 2:

而这也正是这一点。 该同源策略在浏览器不允许GET请求到其他站点。 因此,没有网站可以从其他浏览器中只使用javascipt的获得CSRF令牌。



文章来源: How is using Synchronizer Token Pattern to prevent CSRF safe?