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