【问题标题】:CSRF protection in a Rest APIRest API 中的 CSRF 保护
【发布时间】:2017-01-21 14:01:53
【问题描述】:

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

【问题讨论】:

  • CSRF 令牌用于确保在会话打开时粗略的脚本或页面无法向您的站点发送请求,因此您使用 CSRF 令牌来证明您是谁是。如果您在应用程序中存储令牌,然后在每个请求中发送该令牌,则无需使用 CSRF,因为您正在使用身份验证令牌证明您是谁。

标签: php angularjs symfony security csrf


【解决方案1】:

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

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

如果您在标头中有访问令牌(用于身份验证),则需要将其添加到 Angular 应用程序中的请求中,攻击者将无法这样做,因此您不需要 CSRF 保护。

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

【讨论】:

    【解决方案2】:

    我认为最简单的方法是使用此捆绑包https://github.com/dunglas/DunglasAngularCsrfBundle,它专门用于处理您的用例。

    基本上它是如何工作的:

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 2019-06-03
      • 2017-04-15
      • 2018-10-23
      • 2012-10-08
      相关资源
      最近更新 更多