Rest 中的 CSRF 保护 API

CSRF protection in a Rest API

我在 Symfony REST 项目中 CSRF 实施时遇到问题。我正在使用 AngularJSAuthToken cookie 是使用 NG $cookie 服务存储的,并在 X-Auth-Token header 中的每个请求中发送到服务器,我真的需要实现这个问题CSRF保护? 另一个问题,如果答案是肯定的,我如何使用 Symfony 来做到这一点?因为它在服务器会话中存储令牌,而不是 RESTful,实现 Django 的最佳方法是什么,例如 CSRF 系统(我猜他们存储 CSRF cookie 中的令牌,然后将其与表单输入令牌进行比较? 抱歉我的英语不好,谢谢!

基本上,当攻击者(来自他自己的应用程序)可以使您的用户无意中向您的应用程序发出更改服务器状态的有效请求时,您需要 CSRF 保护。

简而言之,这主要意味着 non-GET 请求(除非 GET 更改了它们不应该更改的内容)并进行了 cookie-based 身份验证,因为即使请求是从另一个网站发出的,cookie 也会被发送。

如果您在 header 中拥有访问令牌(用于身份验证),则需要将其添加到 Angular 应用程序中的请求中,攻击者将无法做到这一点, 所以你不需要 CSRF 保护。

在令牌作为 cookie 发送的基于令牌的身份验证的情况下,它需要 CSRF 保护。在这方面,这与普通的 cookie 身份验证基本相同。

我认为对您的案例来说最简单的方法是使用这个包 https://github.com/dunglas/DunglasAngularCsrfBundle,它是专门为处理您的用例而制作的。

基本上它是如何工作的:

  • 服务器应用程序伪造一个 XSRF-TOKEN,将其存储在会话中并将其作为 cookie 发送到 Angular 应用程序
  • Angular 应用读取 cookie 并为以后的请求设置 X-XSRF-TOKEN
  • 服务器将每个请求(使用请求侦听器)的 X-XSRF-TOKEN 与存储在会话中的令牌值进行比较

如果令牌不匹配,则请求失败。