【问题标题】:Restricted pages with client side templating带有客户端模板的受限页面
【发布时间】:2013-08-21 05:36:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: java javascript security templates angularjs


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 谢谢,经过一番研究,听起来我应该使用 Spring 安全性来匹配来自 ASP.Net 的 AuthorizeAttribute。我会看看我能不能让它工作。
    【解决方案2】:

    想一想,您可以利用 $cookie 和 $cookieStorage Angular API。

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

    【讨论】:

    • 听起来可行,但不幸的是,由于我所在国家/地区发布的规则,我无法使用 cookie。
    • 哇。这是我不知道的。是政策限制在 cookie 中存储信息还是 cookie 本身是不允许的。
    • 可能是关于其中包含的信息,因为这是一个银行应用程序,规则更严格,而且我们真的不想与客户讨论这个主题。他们似乎害怕它。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      相关资源
      最近更新 更多