1

我正在爲Angular創建一個新的企業應用程序。我對角度很感興趣,但是在客戶端處理角色並不適合我。Angular Js安全問題基於角色的授權

基本上我在用戶登錄之前以及在用戶查看頁面之前保存了一個令牌,授權請求發送到服務器以獲取基於令牌的角色和用戶詳細信息。

經過授權後,獲取頁面數據的請求返回給服務器,該服務器返回整個數據,而不考慮用戶的角色,然後根據角色使用ng-switch和render模板。

現在問題在於我試圖在客戶端顯示和隱藏數據,因此在收到用戶信息後,我必須將角色保留在某個Scope變量或客戶端任意位置的本地存儲中。但我的觀點是,如果我將它保留在客戶端,我可以非常輕鬆地更改角色並訪問我想要的任何數據。

因此,我應該假設Angular不適合我的應用程序,我試圖根據服務器角色顯示客戶端數據,因爲我覺得如果用戶可以看到您的邏輯和數據,他可以明顯玩它。

這是我的看法

<div ng-switch="User.data.Role"> 
     <div ng-switch-when="Admin"> 
      <h1>hello you are seeing your dashboard Admin</h1> 
     </div> 

     <div ng-switch-when="Manager"> 
      <h1>hello you are seeing your dashboard Manager</h1> 
     </div> 
    </div> 

這是我如何填寫用戶變量控制器

app.controller('dashoBoardController', ['$scope','UserService', function ($scope, UserService) { 

    $scope.authentication = UserService.authentication; 
    $scope.User = UserService.fillAuthData(); 
    console.log($scope.User); 
    $scope.Greeting = "Welcome! to your Dashboard"; 



}]); 

這是服務方法

var _fillAuthData = function() { 

     var authData = SessionService.get('user'); 

     if (authData) { 
      _authentication.isAuth = true; 
      _authentication.data = authData; 

     } 

     console.log(_authentication); 
     return _authentication; 
    } 

會話服務根據令牌從服務器獲取用戶數據。 正如你所看到的,因爲視圖是如此描述性的,所以改變authData中的角色並不是什麼大不了的事情。

如果有這方面的工作,請幫助我。我真的很想在Angular中進行這個項目。

+0

作爲一般規則,服務應只發送用戶有權查看的數據。換句話說,安全應該由服務而不是客戶來處理。 – 2014-09-10 15:25:28

回答

1

如果Web服務(在服務器上運行)向客戶端返回認證用戶未被授權訪問的數據,則Web服務(服務器端)存在安全漏洞。無論您決定選擇哪種客戶端框架,您都無法修復該客戶端/瀏覽器端。 AngularJS可能適用於你想在瀏覽器中執行的任何操作,但是你的Web服務被破壞了。

+0

感謝您的及時回覆..但我們試圖發送未經授權的數據的唯一原因是因爲我們不想在服務器上完成所有沉重的舉重,而是想要在客戶端上執行所有重要的操作這樣我們的API可以擁有更多的通用方法,所需時間更少,因爲呈現JSON比創建數據庫調用要快。您認爲使用相同的API邏輯,在asp.net中使用knockout和MVC創建應用程序效率會更高在那邊可以有更好的安全控制? – Novice 2014-09-10 19:17:01

+0

不,如果您提到的Web服務器的* API邏輯*存在安全漏洞,那麼切換到另一個瀏覽器端框架將無法修復它。一個體面的瀏覽器調試器甚至會向你顯示網絡響應(服務器返回的明文JSON),包括你想隱藏的數據(例如,在Chrome - >網絡標籤中的CTRL + SHIFT + J)。 – Anton 2014-09-10 19:43:19

+1

Downvote here。我認爲這個問題在這方面是有效的,因爲它與角色有關。服務器是否返回它不應該的數據並不重要。即使不是,如果您使用模板中的角色來說「如果用戶是管理員,則顯示此內容」,那麼可以很容易地將自己變成管理員並查看管理員看到的內容。問題當然是,如果數據丟失,那是什麼。但無論如何,我對此感到不安。 – nomve 2015-08-13 13:45:53

0

我同意nomve,服務器端的安全不是這裏的問題。服務器端的安全性應始終是安全性的最後一道門檻,應始終謹慎實施。

但是,即使沒有從服務器獲取數據,能夠在客戶端破解角色並查看用戶不應該能夠看到的接口,也不是最好的體驗。

每次遠程檢查角色並且不在本地存儲角色解決了問題,但它的成本。是否有原生的方式來加密角色信息並使得更難以在客戶端黑客角色?