使用AngularJS安全管理面板

时间:2016-03-18 02:32:08

标签: angularjs

我想使用PHP + MySQL构建一个使用AngularJS(客户端)和RESTful API(服务器)的Web应用程序,仅用于学习目的。应用程序必须具有管理面板,受登录保护。

我使用ui-router来防止未经授权的用户访问该面板,但据我所知,客户端的每个代码都不安全。

如果恶意用户修改代码以在不登录的情况下授予对面板的访问权限,该怎么办?我知道服务器数据和代码是受保护的,但不是HTML部分(布局暴露),不同于常见的PHP应用程序,其中视图受到保护"在服务器端。我应该担心吗?

2 个答案:

答案 0 :(得分:1)

我会使用$httpProvider来设置至少一个基于令牌的登录,并使用令牌/用户检查。您可以使用Auth服务和login()logoutisLogedIn()等方法管理发件人,以处理状态并将状态保存到$cookies。这样,恶意用户可以破解并获取对​​html模板的访问权限,但没有数据库数据......缩小代码也有助于避免这种风险。

angular.module('myApp', [])
         .run(['Auth', '$location', '$rootScope', function (Auth, $location, $rootScope) {

            $rootScope.$watch(function () {
                if (!Auth.isLogedIn())
                    $location.path("/login");

                return $location.path();
            });
        }])
       .config(['$routeProvider', '$httpProvider',
        function ($routeProvider, $httpProvider) {
            $routeProvider
                    .when('/home', {templateUrl: 'partials/home.html'})
                    .when('/login', {templateUrl: 'partials/login.html', controller: 'LoginCtrl'})
                    .when('/logout', {templateUrl: 'partials/login.html', controller: 'LogoutCtrl'})
                    .otherwise({redirectTo: '/home'});
                $httpProvider.defaults.headers.common["Authorization"] = "";
                $httpProvider.defaults.headers.common["X-User"] = "";
            }
        ]);

来自代码段:

  • $httpProvider.defaults.headers.common会为每个请求设置一个标题。
  • $httpProvider.defaults.headers只会为下一个请求设置headder。
  • run上,$watch上的$rootScope集将在每次更改范围isLogedIn()时触发,应使用数据库中的条目检查标题令牌。

答案 1 :(得分:0)

你是对的,“客户端的每个代码都不安全。” 您的sidede代码需要检查每个访问权限请求。这可以通过会话,Web令牌甚至http基本身份验证来完成。通过javascript(ui-router,onStateChange ...)

的限制非常不安全