在使用令人惊叹的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