仅在 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 过滤器