2014-09-04 159 views
0

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

+0

你可以看看下面的链接。 ['曲奇与令牌。使用Angular.JS'正确获取权限](https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/) – EniGma 2014-09-04 07:35:30

+0

请参阅http://stackoverflow.com/questions/20196737/setting-php-session-on-index-page-for-xsrf-check更好的答案 – ErichBSchulz 2015-03-16 20:54:40

回答

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 
+0

如果你确实将它们存储在一个角度服务中,你如何从服务器中首先获取它们?因此,在阅读您的文章后,我正在考虑创建一个令牌并将其存储在会话和Cookie中,然后angular会访问该Cookie,并在发送请求时将其附加到HTTP标头,并在标头和会话......那是你的意思吗? – Gasim 2014-09-04 07:58:04

+1

是的,你可以从服务器获得令牌。设置一些像'/ api/csrftoken'这样的URL并将令牌存储在角度服务中。或者你可以存储在cookie中。如果你认为cookies足够安全 – Vamsi 2014-09-04 08:26:03