0

我们一直将服务器端模板 (.JSP) 用于 Web 应用程序,但现在我们将 Angular 用于大型项目。尽管出现了一些安全问题,但使用客户端模板开始变得有意义......

是否有可能阻止用户访问某个只有在他登录后才能查看的模板?似乎很容易使用开发人员工具或萤火虫破解它..

控制这一点的一种方法是从服务器返回视图,但我不会失去 Angular 的所有好处吗?

4

3 回答 3

1

根据框架,您可以从服务器限制它,并且您不会丢失任何 Angular 好东西。

将模板包含到 Angular 中的方式是使用ng-viewng-include.

ng-view模板是在路由定义期间配置的。由于这些模板是从服务器加载的,因此您始终可以控制这些模板的加载。

ng-include也可以采用服务器端模板,并且可以使用 AngularJS 强制执行相同的限制。

我们使用 ASP.Net MVC,因此在 ASP.Net 中,您可以AuthorizeAttribute覆盖控制器(服务器端)方法,该方法将视图返回给控制器,获取返回给客户端的内容。

还要记住,一旦加载了模板,它将被 Angular 的模板缓存缓存,因此在刷新页面之前不会获取它(浏览器导航 \ F5)

于 2013-08-19T12:27:37.220 回答
1

一个想法,你可以利用$cookie和 $cookieStorage Angular API。

经过身份验证的用户将在 cookie 中具有特殊值。然后您可以在您的特定控制器中添加一个检查,以查看该值是否存在,它不 - 限制或重定向到不同的视图进行身份验证。

于 2013-08-19T13:17:42.887 回答
1

假设某人足够狡猾,可能很难防止模板本身被看到。当您加载主登录页面时,我假设您的服务器将提供完整的 Angular Javascript 单页应用程序。狡猾的人可以查看加载的 Javascript 以确定路由,然后显式调用以在 Angular 应用程序之外下载这些模板。我认为大多数 Angular 应用程序只是使模板可公开访问。在这种情况下,人们只需要知道模板名称即可。

虽然这听起来有点吓人,但好消息是填充模板的数据应该更容易保护。如果您从服务器上运行的服务获取数据,那么您可以在提供数据之前确保用户实际登录(并且具有适当的角色)。

这意味着狡猾的人可能很容易获得空模板,但如果在服务器上正确完成安全性,那么他们应该很难获得数据以填充该模板。

这个页面有一些关于如何将安全应用到 AngularJS 应用程序的很好的例子:http: //frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/

于 2013-08-19T14:37:39.597 回答