【发布时间】:2014-03-14 20:43:00
【问题描述】:
在我们的 java 应用程序中,我们使用 Spring 安全性来处理基于角色的授权。最近,我们意识到对web.xml 中的多个 servlet 映射执行这些 URL 检查很容易被绕过。但是,在将其缩减为一个 servlet 映射后,我仍然不确定我们是否正确设置了 URL 匹配器,因为它们非常容易绕过。例如:
<sec:intercept-url pattern="/m/partner/list/**" access="hasRole('VIEW_ADMIN_PARTNER_LIST')"/>
乍一看,它确实会阻止具有VIEW_ADMIN_PARTNER_LIST 角色的用户加载该页面......直到我将.html 添加到它的末尾。然后它加载就好了。或者,如果我添加 .fff 或任何其他扩展名,它就可以工作。因此,我们将模式更改为:
<sec:intercept-url pattern="/m/partner/list**" access="hasRole('VIEW_ADMIN_PARTNER_LIST')"/>
效果很好!现在无论我在 url 末尾添加什么扩展名,我仍然会收到 403 错误。但是.... 在 URL 的末尾添加一个斜杠会完全绕过安全性。不是我们想要的。
看来要真正实现实际的 URL 模式安全,我们必须同时实现这两种模式?这不太理想,因为我们有超过 75 条 URL 安全规则,复制它们并保持它们同步是很困难的。有没有更好的方法来编写模式匹配,或者 Spring 的安全性本身就被破坏了?
编辑:这是来自我们 web.xml 的相关信息:
<servlet-mapping>
<servlet-name>myproject</servlet-name>
<url-pattern>/m/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【问题讨论】:
-
可以看到对应的web.xml配置吗?它可能有缺陷,这就是它行为不端的原因。
-
@anttix 刚刚将其添加到我的帖子中。
-
那时我会声称您的配置中有其他规则在某些条件下优先于该行。
-
使用 log4j.logger.org.springframework.security=DEBUG 启用调试输出,控制台查看匹配的规则。
-
哦,另一个猜测。也许您的安全配置中有这样的一行?
如果是这种情况,所有模式都会变成正则表达式而不是 ant 匹配器,而 something/** 只会匹配 something、something/、something//// 等 @987654321 @
标签: java spring spring-mvc spring-security