csrf令牌为angularjs存储的位置

时间:2014-09-04 07:20:47

标签: php angularjs cookies csrf

在利用令人惊叹的AngularJS之前,我曾经将CSRF令牌存储在PHP的Sessions变量中。我的CSRF验证已经准备就绪,可以在会话中使用它。但是,问题是AngularJS无法访问PHP Session变量来获取令牌。我应该在哪里存放它们?将它们存放在饼干中是否安全?什么是最安全的方法来解决这个问题?也许我应该生成令牌并将它们存储在会话和cookie中,然后针对会话检查cookie,然后在使用它时更新令牌?

1 个答案:

答案 0 :(得分:1)

我更喜欢将它存储在角度服务中,因为可以轻松访问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