2016-01-18 27 views
0

我有一个角度应用程序,每当我尝试访问安全路由时,我首先发送一个请求到服务器来验证我的令牌。如果令牌有效,我使用用户的详细信息向客户端发送一个对象,并且一个字段告诉我用户是否是管理员。在某些页面上,我想一定的div只能由管理员可以看到,所以我这样做:角度 - 隐藏管理数据使用ng-if

<div ng-if="userData.isAdmin">Admins Only</div> 

是我的这个方案是否足够安全?我不确定,因为具有足够的角度知识的黑客可能会尝试更改我的变量。我也碰到过类似的讨论在下面的链接:

using ng-if to secure different content on page angular js

不过,我不太明白他们的结论是什么。他们是否试图说客户端应用程序不够安全,还是有更好的角度诀窍可以给我我需要的东西?

谢谢。

+0

这不是非常安全......没有任何东西阻止任何人进入控制台并将'userData.isAdmin'改为true。 – tymeJV

+0

这对于摆弄javascript调试器的人来说并不安全。安全的方法是使用'$ http'或类似的东西获取管理数据/内容。 –

+0

您可以提供一个简单的代码示例来说明最好的方法吗? –

回答

0

这里,它是如何经常做 - 你admin.html样子:

<div ng-if="userData.isAdmin"> 
<div ng-repeat="data in secureData">{{data}}</div> 
</div> 
<div ng-if="!userData.isAdmin"> 
Access denied 
</div> 

你在控制器获取数据:现在secureData = $http('/api/secureData'...) ,所有你需要的是在服务器上添加支票/api/secureData呼叫。

所以你保护数据,而不是html模板。

+0

我明白了你的观点,但是如果secureData包含例如链接,当你点击它们时,一个事件会被广播到rootcope,黑客是否能够在调试器中模拟secureData并广播该事件? –