仅在 Spring Security 5 中允许分号用于某些特定的 url,即 StrictHttpFirewall?

Posted

技术标签:

【中文标题】仅在 Spring Security 5 中允许分号用于某些特定的 url,即 StrictHttpFirewall?【英文标题】:Allow semicolon only for some specific url in Spring Security 5 i.e. StrictHttpFirewall? 【发布时间】:2018-09-20 22:19:48 【问题描述】:

我们正在使用 primefaces 媒体组件,它生成的 url 为 /javax.faces.resource/dynamiccontent.properties;/ .pdf 其中包含分号( ;)。

因此,我们遇到了异常,即 请求被拒绝,因为 URL 包含潜在的恶意字符串。

在 Spring Security 5 更新中默认启用 StrictHttpFirewall。 我们可以通过在 StrictHttpFirewall 中使用 setAllowSemicolon(true) 来指定允许分号。

但这将适用于所有 URL。

有什么方法可以配置为只允许特定 URL 使用分号?

【问题讨论】:

【参考方案1】:

正如上面的答案所示,我还为允许使用分号的自定义防火墙添加了以下 XML 定义。

<bean id="myHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
    <property name="allowSemicolon" value="true"/>
</bean>

<security:http-firewall ref="myHttpFirewall"/>

但是,这本身并没有影响。要在我的应用程序中使用该防火墙,我必须将其添加到我的 FilterChainProxy 中,如下所示:

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
    <constructor-arg>
        <list>
            <security:filter-chain pattern="/**" filters="...."/>
        </list>
    </constructor-arg>
    <property name="firewall" ref="myHttpFirewall"/>
</bean>

【讨论】:

【参考方案2】:

如果你使用xml配置,声明你的bean:

<bean id="customStrictHttpFirewall"
    class="org.springframework.security.web.firewall.StrictHttpFirewall">
    <property name="allowSemicolon" value="true"/>
</bean>

然后在 security.xml 参考:

<http-firewall ref="customStrictHttpFirewall"/>

如果你使用注释,你可以搜索答案,like this!

【讨论】:

以上是关于仅在 Spring Security 5 中允许分号用于某些特定的 url,即 StrictHttpFirewall?的主要内容,如果未能解决你的问题,请参考以下文章

Spring中的@SendToUser是不是仅在集成了Spring Security时才有效?

如何仅在安全端点上应用 Spring Security 过滤器?

Spring Security仅在成功登录后显示主页[关闭]

仅在特定 URL 上调用自定义 Spring Security 过滤器

如何仅在 localhost 的 Spring Security 中禁用 csrf?

Spring security logout - 仅在登录用户触发注销时添加消息