我们一直使用服务器端模板(.JSP)用于Web应用程序,但现在我们将Angular用于大型项目。尽管一些安全问题已经出现,但使用客户端模板开始有意义......
是否有可能阻止用户访问某些只有在他登录后才能查看的模板?似乎很容易使用开发人员工具或萤火虫来破解它。
控制它的一种方法是从服务器返回视图,但是我不会从Angular中删除所有的东西吗?
答案 0 :(得分:1)
根据框架的不同,您可以从服务器限制此项,并且不会丢失任何Angular好东西。
将模板包含在Angular中的方式是使用ng-view
或ng-include
。
ng-view
模板。由于这些模板是从服务器加载的,因此您始终可以控制这些模板的加载。
ng-include
也可以使用服务器端模板,并且可以使用AngularJS强制执行相同的限制。
我们使用ASP.Net MVC,所以在ASP.Net中你可以将AuthorizeAttribute
置于控制器(服务器端)方法上,该方法将视图返回给控制器,返回给客户端。
另外请记住,一旦加载了模板,它将被Angular的模板缓存缓存,因此在刷新页面之前不会获取它(浏览器导航\ F5)
答案 1 :(得分:1)
有人想过,您可以利用$cookie和$ cookieStorage Angular API。
经过身份验证的用户在Cookie中会有一个特殊值。然后,您可以在特定的控制器中添加一个检查,以查看该值是否存在,它不是 - 限制或重定向到另一个视图进行身份验证。
答案 2 :(得分:1)
假设有人狡猾,可能很难阻止模板本身被人看到。当您加载主登录页面时,我假设您的服务器将提供完整的Angular Javascript单页面应用程序。狡猾的人可以查看加载的Javascript以确定路由,然后进行显式调用以在Angular应用程序之外下载这些模板。我认为大多数Angular应用程序只是使模板可以公开访问。在这种情况下,所有人都需要知道的是要访问它们的模板名称。
虽然这听起来有点可怕,但好处是填充模板的数据应该更容易保护。如果从服务器上运行的服务获取数据,则可以在提供数据之前确保用户实际登录(并具有适当的角色)。
这意味着一个狡猾的人可能很容易获得空模板,但如果在服务器上正确完成安全性,那么他们应该很难获取数据来填充该模板。
此页面提供了一些关于如何将安全性应用于AngularJS应用程序的良好示例:http://frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/