2014-09-04 160 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