angularjs的csrf代币存储位置


csrf token where to store for angularjs

在使用令人惊叹的AngularJS之前,我曾将CSRF令牌存储在PHP的Sessions变量中。我的CSRF验证已经准备好,在会话中使用它时可以工作。然而,问题是AngularJS无法访问PHP会话变量来获取令牌。我应该把它们存放在哪里?把它们放在饼干里安全吗?最安全的方法是什么?也许我应该生成令牌并将其存储在会话和cookie中,然后根据会话检查cookie,然后在令牌使用后续订?

我更喜欢将其存储在一个有角度的服务中,因为cookie可以很容易地访问。在发送XHR时,附加令牌并发送。

同时在会话中维护一个副本,您必须在服务器端进行检查。我们不应该信任来自任何客户端的任何请求,我们必须始终像攻击者发送请求一样进行编码。我们应该在服务器端上处理它们

编辑:

您可以在此处阅读有关服务的信息:https://docs.angularjs.org/guide/services

angular.module('app').service("Auth", function () {
    return {
       csrfToken: "some token"
    }
})

在控制器中,您可以注入此服务和

angular.module('app').controller("someController",
  function ($http, Auth) { // injecting Auth service
    $http({method: 'POST', url: "http://example.com/users/1",
         xsrfHeaderName: "csrfToken", 
         header: {csrfToken: Auth.csrfToken} }) // token taken from angular service
  })

如果您想存储在cookie中。你可以做这个

$http({method: 'POST', url: "http://example.com/users/1", 
    xsrfCookieName: "name of cookie in which you stored the token"}) 
                     // fill cookie name