【问题标题】:How to handle Privilege Escalation in Spring application如何在 Spring 应用程序中处理权限提升
【发布时间】:2017-03-09 23:40:46
【问题描述】:

我们有一个应用程序具有 3 个不同的用户角色,即用户、作者和管理员。每个访问角色都有不同的菜单和屏幕集。

问题是即使菜单项被隐藏,如果我们捕获管理 URL 并在用户登录时将其传递,它正在打开页面。页面上的所有操作都将不起作用,但我们仍计划限制页面打开。

我能看到我们如何处理的唯一方法是在每个操作中编写一个条件,以在打开页面之前验证访问。但是用这种方法我们应该接触很多文件,有没有最好的方法来处理这种情况。

我们的应用程序是使用 Spring MVC 框架编写的。

谢谢。

【问题讨论】:

    标签: spring spring-mvc owasp


    【解决方案1】:

    你问:

    但是用这种方法我们应该接触很多文件,有没有最好的 处理这种情况的方法。

    来自 Spring MVC HandlerInterceptor javadoc

    "应用程序可以注册任意数量的现有或自定义 某些处理程序组的拦截器,添加常见的 无需修改每个处理程序的预处理行为 实施。

    你可以做什么:

    • 编写一个自定义的HandlerInterceptor,它应该扩展 HandlerInterceptorAdapter
    • 覆盖boolean preHandle() 方法。在调用处理程序之前调用此方法。因此,您可以检查登录用户的访问权限(可能来自会话)。您可以在此方法中编写自定义响应。
    • 在您的dispatcher-servlet.xml 中注册拦截器。

    例如:

    public class AuthInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public boolean preHandle(HttpServletRequest request,
                                 HttpServletResponse response,
                                 Object handler) throws Exception {
    
            String uri = request.getRequestURI();
            User user = (User) request.getSession().getAttribute("foo"); //for example
    
            if (...) {        //check access to this uri, if access fails
                response.sendRedirect("/to/some/url");
                return false;
            }
            return true;
        }
    }
    

    并将这个HandlerInterceptor注册到dispatcher-servlet.xml

    <mvc:interceptors>
        <bean class="your.package.AuthInterceptor"/>
    </mvc:interceptors>
    

    您可以将此拦截器配置为更特定于 url。请参阅Spring ReferenceSpring javadoc

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 2014-07-15
      • 1970-01-01
      • 2020-06-14
      • 2015-08-13
      相关资源
      最近更新 更多