单页应用。模板管理的安全性

Posted

技术标签:

【中文标题】单页应用。模板管理的安全性【英文标题】:Single page application. Security for template management 【发布时间】:2016-11-30 05:36:09 【问题描述】:

在我的应用程序中,我在单页 (AngularJS) 和服务器休息服务中有 WEB-UI。 使用spring boot实现服务器,java注解配置,开启安全。我可以使用基于安全限制角色的服务器部分管理休息响应。

角度控制器模板的类似问题。 对于相同的请求,如果角色不同,服务器应该返回不同的角度模板

最后一个问题应该如何解决?

【问题讨论】:

【参考方案1】:

也许你可以在控制器中创建动作:

@RequestMapping(value="template.html")
public String home(HttpServletRequest request)

    if (request.isUserInRole("ROLE_ADMIN")) 
        return "/template1.html";
     else 
        return "/template2.html";
    


也许您还需要配置ViewResolver(这取决于您的配置)。

【讨论】:

Idea 适用于刚开始或应用程序只包含一两个要处理的 url,但如果您有很多类似的情况,则解决方案应该很复杂。应该有工厂建设者在同一个地方配置所有情况,你不能在控制器级别管理它。我认为建议的方式只能用于测试。【参考方案2】:

无论何时使用 templateUrl,您都可以通过实现一个函数来切换模板。例如:

而不是这个:

...
templateUrl: "template.html"
...

试试这个:

...
templateUrl: function() 
                 if( ... ) return "template1.html"
                 else return "template2.html";
               

这适用于指令、路由等

PS:这绝不是一种隐藏模板的安全方式。

【讨论】:

当然可以。但问题很复杂。我不应该管理基于客户端权限的限制。我认为这个过滤器应该在服务器上。 但是按照您的想法,客户如何知道当前会话所需的同一组的哪个模板? @Sergii:真正的安全必须在服务器方法中。但 IHM 不是安全的一部分,它唯一的作用是避免向简单用户显示链接或按钮,这些链接或按钮会在单击时导致 403。从安全的角度来看,根据明显的角色更改客户端上的模板是可以的只要在服务器上实现了实际的安全性。当您使用 spring-security 时,我会在服务层使用方法安全性。 @Sergii 正如 Serge 解释的那样,如果您的模板暴露于任何 http get,那么您在 Web 环境中就永远不会安全。您确实必须关闭后端的那扇门,仅在规则允许时才允许模板到达客户端。 @wdanda,我知道我不能在网络上使用安全性,但您的解决方案需要一些安全信息来解决问题。这是我不同意你的回答的第一个主要原因。我的评论问题指出了这一点。我需要服务器端解决方案来处理如果角色不同,服务器应该返回不同的角度模板。【参考方案3】:

我有一个建筑师的想法。

要解决这个问题应该使用UrlBasedViewResolver来创建\配置特殊的CustomSecurityBasedInternalResourceViewResolver

如何实现自定义视图解析器请查看answer here或为您提供解决方案。

【讨论】:

以上是关于单页应用。模板管理的安全性的主要内容,如果未能解决你的问题,请参考以下文章

Oauth2.0 |如何在 iframe 中运行的单页应用程序中管理用户会话?

具有基于 HttpOnly cookie 的身份验证和会话管理的单页应用程序

应用数据静态化架构高性能单页Web应用

AJAX:单页应用程序结构/安全性

React js:在单页应用程序中呈现多个索引 html

单页应用程序中的安全身份验证/授权