Javascript 如何使用同步器令牌模式来防止CSRF安全?

Javascript 如何使用同步器令牌模式来防止CSRF安全?,javascript,security,web,csrf,Javascript,Security,Web,Csrf,我一直在读关于使用同步器令牌模式来防止CSRF(CSRF意味着跨站点请求伪造)的文章,但我不明白它实际上是如何安全的 假设我有一个假银行网站fakebank.com,有两个URL: fakebank.com/drawinform.html-显示提款单的GET请求 fakebank.com/doWithdraw-发布到此url以执行取款操作 我对该安全漏洞的理解是,maliciousSite.com可以将POST请求欺骗到fakebank.com/doWithdraw,如果您当前登录到fake

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

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

  • fakebank.com/drawinform.html
    -显示提款单的GET请求
  • fakebank.com/doWithdraw
    -发布到此url以执行取款操作
我对该安全漏洞的理解是,
maliciousSite.com
可以将POST请求欺骗到
fakebank.com/doWithdraw
,如果您当前登录到fakebank,POST将成功

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


这是假设fakebank.com没有检查HTTP referer或Origin,或者
maliciousSite.com
成功地欺骗referer/Origin是fakebank.com,这正是问题所在。浏览器中的不允许对其他站点的GET请求。因此,没有一个站点可以仅在浏览器中使用Javascipt从其他站点获取CSRF令牌

这是安全的,而且
maliciousSite.com
不能简单地执行
GET
,窃取令牌,然后执行
POST
,原因是请求由用户的浏览器执行,而不是由
maliciousSite.com
上的服务器执行。从
fakebank.com
返回的所有数据都会返回到用户的浏览器,而不是返回到
maliciousSite.com
上的服务器。如果
maliciousSite.com
确实执行GET来检索令牌,则该令牌将与发给用户的令牌不同
maliciousSite.com
由于相同的域限制,无法将此cookie设置到用户浏览器中以提交到
fakebank.com

CSRF
POST
攻击通过诱使用户浏览器直接使用格式正确的
POST
请求请求
fakebank.com/drawform.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
可能能够猜到它。此外,如果浏览器在执行相同的域策略时存在弱点,则可能会利用此漏洞。一般来说,现代浏览器不容易受到这种攻击


如果这是一个不充分的解释,请让我知道,我将尝试为您更好地阐明它。

如果您能够将javascript注入用户浏览器以发起攻击,如何阻止您简单地嵌入一些jquery来执行GET请求、解析它,然后在同一个
标记中发布所有内容?@SLC如果您可以将脚本代码注入用户的浏览器,那么您不再谈论CSRF,而是XSS。在这一点上,CSRF令牌不仅毫无价值,而且是您的最小问题。特别是,您不能只执行jquery GET请求的原因。认证的XHR(js发起)请求是指此请求将被受害者浏览器阻止,除非显式CORS头设置为允许来自maliciousite.com的请求并允许凭据。即使是通配符也将被阻止。例如,确保您的站点永远不会返回:Access Control Allow Origin:malicioussite.com(许多在线CORS教程都将Allow设置为传入的Origin标头)和Access Control Allow Credentials:true。