front-end/back-end 在两个不同的域上时,CSRF 保护如何提供比 CORS 控制更高的安全性?

How does CSRF protection give me greater security than CORS control with front-end/back-end being on two different domains?

如果我有:

除了要跳过更多的障碍之外,CSRF 还提供了哪些额外的安全性?攻击者如果不先将他们的代码注入网络 front-end 就无法 POST 进入我的后端,对吗?

On this question,克里斯普拉特说,"[...]So, yes, I think as a rule any API view should be CSRF exempt.[...]"。这个概念是否有效,是否包括我的拓扑结构?

在我的配置中,正确配置了 CORS,我是否需要修饰来自网络的 GETPOSTPUTDELETE 请求 front-end 与 Cookie 数据元素 CSRF 令牌?

:
开明的人可能会认为这个问题是重复的,但我已经阅读 thisthis, this, this, this, this, this, 我还需要一些帮助。请帮助我进一步充实这个想法。

在 CSRF 攻击中,攻击者的网站发布到网站或 API 使用浏览器中仍然有效的身份验证 cookie。

如果您将 CORS 设置为仅允许来自您站点的请求,则请求将失败,因为任何现代浏览器都会添加一个来源 header 来指示攻击者站点。

但这取决于您的所有用户都使用符合 CORS 标准的浏览器这一事实。由于 CORS 仍然很新,这不是我所假设的。如果使用 cookie 进行身份验证,我建议为您的 API.

添加 CSRF 保护

但更好的解决方案是不要将 API 建立在 cookie 身份验证的基础上,并使用不易受到 CSRF 攻击的基于令牌的安全性。

在从域加载页面的上下文中,CORS 仅控制浏览器是否可以读取 来自另一个域的 XHR 响应。它不控制浏览器可以向 发出请求的域。也就是说,CORS 将为您 header 设置的任何来源放宽 Same Origin Policy - 但关于同源策略的任何内容都没有说明不能首先提出请求。

其他域仍然可以 GET 和 POST 到您的域,只是您的站点生成的任何响应都无法在 client-side 脚本中读取,除非 CORS 允许。 The actual GET and POST is still received by your server and processed.

因此,您仍然需要 CSRF 预防 - 即使对于使用 CORS 兼容浏览器的用户也是如此。