我是新手,我只是想问,有什么办法可以保护你的角度变量/属性吗?
就像我有一个单页应用程序,其中包含来自客户端和服务器端的身份验证。 对于简单示例,我有2个用户类型:简单用户和管理员。
这是一个基本的 ng-view :
<div class="container">
<div class="admin-view" ng-show="isAdmin">
.
.
</div>
<div class="user-view" ng-show="!isAdmin">
.
.
</div>
</div>
在 app.js
中app.run(function($rootScope,$route, $http){
var user = {};
$rootScope.isAdmin = false;
$rootScope.getUser = function(){
$http({
methop: 'GET',
url: getMyUserPlease(...)
}).then(function successCallback(response){
user = response;
if (user.role === 'admin'){
$rootScope.isAdmin = true;
} else {
$rootScope.isAdmin = false;
}
})
}
})
它工作正常,但是如果我在浏览器控制台中检查它,我可以将isAdmin
属性设置为true
,我可以看到我无法访问的所有内容看到。
只需在浏览器控制台中输入以下内容:
$rootScope = angular.element(document).scope();
$rootScope.isAdmin = true;
$rootScope.$apply();
是否有任何良好做法,以保护&#34;内容&#34;?
谢谢
答案 0 :(得分:2)
TLDR你真的不能。
简单的答案是不要信任角度,用户不应该看到信息,使用后端授权。由于角度是在浏览器中运行的,因此浏览器的所有者可以执行他们想要的操作,包括更改数据。
最好的解决方案是创建一个通过端点回调应用程序并控制端点上的auth的指令。
我还会考虑使用ngIf来避免显示Dom,如果他们没有被授权。区别在于ng-show hide use display:none,而ng-if阻止了Dom渲染。
P.S。人们给你的黑客可能会通过混淆工作,但永远不会万无一失