1

저는 회사에 대해 각도로 새 엔터프라이즈 응용 프로그램을 만들고 있습니다. 난 각도에 대해 매우 흥분하지만 클라이언트 측의 역할은 나를 위해 밖으로 작동하지 않습니다.Angular Js 보안 문제 역할 기반 인증

기본적으로 사용자 로그가 있고 페이지를보기 전에 토큰을 저장하고 있습니다. 토큰을 기반으로 역할 및 사용자 세부 정보를 얻기 위해 서버에 인증 요청이 전송됩니다.

권한 부여 후 사용자의 역할과 관계없이 전체 데이터를 반환하는 서버에 페이지 데이터를 가져 오도록 요청한 후 권한 부여에 따라 ng-switch와 render 템플릿을 사용합니다.

이제 문제는 클라이언트 측에서 데이터를 표시하고 숨기려고하므로 사용자 정보를받은 후에 클라이언트 측의 범위 변수 또는 로컬 저장소에서 역할을 유지해야한다는 것입니다. 그러나 여기서 중요한 점은 클라이언트 측에서이 역할을 유지하면 역할을 매우 쉽게 변경하고 원하는 데이터에 액세스 할 수 있다는 것입니다.

서버의 역할에 따라 클라이언트 측의 데이터를 표시하려고하는 내 응용 프로그램에 Angular가 맞지 않는다고 가정해야합니다. 왜냐하면 사용자가 자신의 논리와 데이터를 볼 수 있으면 분명히 볼 수 있기 때문입니다. 그것으로 놀아 라.

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; 
    } 
입니다 내가 컨트롤러에서 사용자 변수를 채우는 방법

<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> 
여기

가 내보기입니다

세션 서비스가 토큰을 기반으로 서버에서 사용자 데이터를 가져옵니다. 보기에서 볼 수 있듯이 authData에서 역할을 변경하는 것은 그리 중요하지 않습니다.

해결 방법이 있으면 도와주세요. 나는 Angular에서이 프로젝트를 정말로 원했습니다.

+0

일반적으로 서비스는 사용자가 볼 수있는 데이터 만 되돌려 보내야합니다. 즉, 보안은 서비스가 아닌 클라이언트가 처리해야합니다. –

답변

1

웹 서비스 (서버에서 실행)가 인증 된 사용자에게 액세스 권한이없는 데이터를 클라이언트에 반환하는 경우 웹 서비스 (서버 측)에 보안 결함이 있습니다. 선택한 클라이언트 측 프레임 워크에 상관없이 클라이언트/브라우저 측을 수정할 수있는 방법은 없습니다. AngularJS는 브라우저에서 원하는 모든 작업을 처리 할 수 ​​있지만 웹 서비스가 손상되었을 수 있습니다.

+0

신속한 응답을 해 주셔서 감사합니다. 그러나 우리가 허가받지 않은 데이터를 보내려는 유일한 이유는 클라이언트에서 모든 무거운 조작을하기보다는 서버에서 많은 힘이 들기를 원하지 않기 때문입니다. JSON 렌더링은 데이터베이스 호출보다 빠르다. 우리는 asp.net에서 knockout과 MVC를 사용하여 애플리케이션을 생성하는 것이 동일한 API 로직을 사용하는 것이 더 효율적이라고 생각한다. 저기서 더 나은 보안 통제를 할 수 있습니까? – Novice

+0

아니요, 참조하는 웹 서버의 * API 논리 *에 보안 결함이있는 경우 다른 브라우저 측 프레임 워크로 전환해도 문제가 해결되지 않습니다. 알맞은 브라우저 디버거는 숨기려는 데이터 (예 : Chrome의 경우 Ctrl + Shift + J -> 네트워크 탭)를 비롯하여 네트워크 응답 (서버에서 반환 한 일반 텍스트 JSON)을 표시합니다. – Anton

+1

Downvote 여기에 있습니다. 이 질문은 역할과 관련이 있기 때문에이 문맥에서 유효하다고 생각합니다. 서버가 반환해서는 안되는 데이터가 반환되는지는 중요하지 않습니다. 그렇지 않은 경우에도 템플릿 내부에서 역할을 사용하여 "사용자가 관리자이면 표시됩니다"라고 말하면 관리자가되고 관리자가 보는 것을 보는 것이 쉽습니다. 문제는 물론 데이터가 누락 된 경우 그게 무엇입니까? 하지만 어쨌든 그것에 대해 불안해합니다. – nomve

0

나는 동의한다, 서버 측의 보안은 여기에 문제가되지 않는다. 서버 측의 보안은 항상 보안을위한 마지막 문이어야하며 항상 조심스럽게 구현되어야합니다.

그러나 클라이언트 측에서 역할을 해킹하고 서버에서 데이터를 가져 오지 않아도 사용자가 볼 수 없도록해야하는 인터페이스를 볼 수 있다는 것은 최고의 경험이 아닙니다.

역할을 원격으로 확인하고 역할을 로컬에 저장하지 않으므로 문제가 해결되지만 비용이 많이 듭니다. 역할 정보를 암호화하고 클라이언트 측에서 해커 역할을 더 어렵게하는 고유 한 방법이 있습니까?