CORS& CSRF - 澄清?

时间:2014-09-16 07:00:04

标签: cross-domain cors csrf

我已经使用CORS很长时间了,可以从其他域读取ajax响应。

我和一位同事讨论过关于CORS的问题 - 在讨论时 - 他提供了一个我认为与CORS问题无关的例子。

他说:

  

相同的原始政策是,如果您已登录到您的银行并且   访问我的网站,我无法利用您的凭据并进行交叉   原始请求到您的银行并发给自己钱。

但在我看来,这是一种纯粹的csrf攻击,与CORS无关(除非阅读ajax的回复):

所以我说:

  

关于您撰写的内容:"如果您已登录银行并继续   我的网站,我无法利用您的凭据并成为交叉起源   要求你的银行给自己发钱。" ........如果我去你的   网站,你向银行运行ajax请求:银行服务器将看到   请求。如果你用withCredentials运行ajax请求,那么   cookies将被发送我认为您正在谈论阻止CSRF攻击

然后他说:

  不,CSRF有所不同。 CSRF就是我偷偷摸摸一张图片的时候   按钮在您的网站上发出请求以绕过相同的来源   政策。

(恕我直言 - 不! - 你不必偷偷把任何东西都带到我的网站上。企业社会责任基金是你代表我做出不必要的请求来做恶事 - 你不必偷偷摸摸的东西)

所以我告诉他:

  

例如,您可以将html表单发送到已知位置    - 银行所以解决方案是cookie /隐藏字段匹配服务器值所以如果恶意网站正在做一个请求 - 它不会有   隐藏字段值您的示例 - 谈论csrf攻击。那个部分   在那里你无法阅读回应 - 是唯一的角色部分。   我只是说银行的例子在这里有点无关(对CORS的讨论)

他说:

  

当然是相关的

最后我说:

IMO - CORS是为(示例)而设计的:

  

让a.com向Facebook运行ajax请求以获取所有朋友 - 其中   更有意义的地方

问题:

学习,变得更好,为了解决这种困惑,感到平静 - 我是对的吗?

1 个答案:

答案 0 :(得分:1)

简短的回答是,为了使他的攻击成为可能,假设任何突变都是使用POST / PUT / DEL发出的,你的银行必须启用CORS才能允许XHR(飞行前检查)否则会失败)并且容易受到CSRF攻击。

当然,如果银行容易受到CSRF的影响,那么一个简单的表格也可以解决问题。

所以你是对的。 CORS不会阻止CSRF,它所做的只是放宽同源策略强制执行的限制。