我想使用PHP + MySQL构建一个使用AngularJS(客户端)和RESTful API(服务器)的Web应用程序,仅用于学习目的。应用程序必须具有管理面板,受登录保护。
我使用ui-router来防止未经授权的用户访问该面板,但据我所知,客户端的每个代码都不安全。
如果恶意用户修改代码以在不登录的情况下授予对面板的访问权限,该怎么办?我知道服务器数据和代码是受保护的,但不是HTML部分(布局暴露),不同于常见的PHP应用程序,其中视图受到保护"在服务器端。我应该担心吗?
答案 0 :(得分:1)
我会使用$httpProvider来设置至少一个基于令牌的登录,并使用令牌/用户检查。您可以使用Auth
服务和login()
,logout
,isLogedIn()
等方法管理发件人,以处理状态并将状态保存到$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 ...)
的限制非常不安全