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