gpt4 book ai didi

java - Spring 的秒 :intercept-url easily bypassed?

转载 作者:行者123 更新时间:2023-12-01 06:16:56 25 4
gpt4 key购买 nike

在我们的 java 应用程序中,我们使用 Spring security 来处理基于角色的授权。最近,我们发现对 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>

最佳答案

切换到使用正则表达式来表达您的 URL,它为您提供了更大的灵 active ,例如:

<sec:http auto-config="true" use-expressions="true" path-type="regex">
<sec:intercept-url pattern="/m/partner/list.*" access="hasRole('VIEW_ADMIN_PARTNER_LIST')"/>
</sec:http>

注意 /** 已被 .* 替换,在正则表达式世界中它将匹配任何内容。

关于java - Spring 的秒 :intercept-url easily bypassed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com