我是AngularJS的新手,并试图掌握实施访问控制层的概念,以便某些页面/菜单对某些用户隐藏。
我通常在后端(PHP / MySQL)上实现ACL和所有路由,但是这个项目要求我只在客户端执行所有操作。
我们有一个负责身份验证的远程服务器,成功登录后会返回is_admin
标志,以便我知道是否显示其他信息。
虽然不太可能,因为Angular也是渲染引擎并负责所有逻辑,我担心用户将能够使用浏览器开发工具和/或其他第三方工具并获得对这些区域的访问权限(因为浏览器中的所有脚本和逻辑都是可见的)。
所以,如果我这样做:
if (user.is_admin === true)
{
//display the additional admin data...
}
用户可以在浏览器工具中设置user.is_admin = true
并获得访问权限。
使用PHP等服务器端呈现,用户将永远无法了解这些隐藏区域。即
<?php
if ($user->is_admin === true) {...}//user will never ever see that or be able to modify $user properties
?>
当然,服务器将继续对每个请求进行身份验证,因此此漏洞只允许有限的访问,但似乎仍然是隐藏某些用户的部分的非安全方式。
我是否遗漏了Angular中的某些内容,或者是否有更好的方法可以帮助客户端黑客攻击它?
答案 0 :(得分:1)
隐藏部分的Angular方式使用ng-if/ng-show/ng-hide
指令,如:
<div ng-if="is_admin">...</div>
您无法隐藏那些查看来源的人或您在应用中提供的资源。所以不要为这些视图提供管理数据。
我的方法是制作一个“管理”应用程序以及“标准”应用程序和它们之间的链接。这样,暴露的唯一内容就是指向管理站点的链接,这些链接被非管理员用户阻止:
<div ng-if="is_admin"><a href="/admin/#/link">Link</a></div>
对/admin/*
页面的所有请求如果不是管理员,则会返回401状态代码。 REST资源还会根据需要返回401状态代码。
(修改:在ng-hide
上方更改为ng-if
以取消生成的DOM中的div。)