Spring Security 之 StrictHttpFirewall 坑

这个防火墙有个坑啊 啊 啊。。。。。

事情原由:项目初次引入security为swagger相关页面做验证

异常:org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.

 

解决:

解决方法:(注意方法下方趟过的撸)

1.强制自定义防火墙

    @Bean
    public HttpFirewall defaultHttpFirewall() {
        return new DefaultHttpFirewall();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        //新防火墙强制覆盖原来的
        web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
        //super.configure(web);
    }

2.修改swagger源码,修复//的bug

3.网上查到的方法(我自己测试无法使用这种方法)

    @Bean
    public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
        StrictHttpFirewall firewall = new StrictHttpFirewall();
        //此处开启不让检测‘/’符号
        firewall.setAllowUrlEncodedSlash(true);
        return firewall;
    }
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
        //super.configure(web);
    }

趟过的路:

方法一:使用方法已通过的确实可以避开“//”,但是跟过源码

改源码使用的uri是String类型,这个if即使含“//”也会返回false(即有效的url),感觉这个方法没啥用

方法二:正常没毛病,可用、

方法三:最坑

使用该方法,途中校验1可以通过,但是校验2中isNormalized(request)的检验"//"是写死的啊

ε=(´ο`*)))唉,最靠谱的方法二需要体力ε=ε=ε=(#>д<)ノ

各位路过的,如果有指正请及时赐教,挽救我于无尽苦海

 

### 回答1: 是什么? A:StrictHttpFirewallSpring Security框架中的一个类,用于执行基于HTTP协议的安全性检查和过滤。它可以用于保护Web应用程序,防止恶意攻击、注入和跨站脚本等安全漏洞。它提供一组默认的安全规则,也可以通过配置自定义规则来满足特定的安全需求。严格的HttpFirewall还在维护在Spring Security的子项目中,叫作Spring Security Web。 ### 回答2: StrictHttpFirewallSpring Security中的一种HttpFirewall实现。它是一种严格的HTTP防火墙,用于处理和过滤HTTP请求中的特殊字符和编码。 在Web应用程序中,用户可以通过HTTP请求提交各种数据,包括URL路径、查询参数、请求头和请求体。然而,有时用户可能会故意或无意地使用包含特殊字符或编码的恶意数据来攻击应用程序,比如SQL注入、跨站脚本攻击等。 StrictHttpFirewall的作用就是防止这种类型的攻击。它通过定义安全规则来过滤和处理HTTP请求中的特殊字符和编码,从而保护应用程序的安全性。 StrictHttpFirewall可以配置以下属性: 1. allowUrlEncodedSlash:设置是否允许URL中的斜杠字符进行编码。默认情况下,不允许编码斜杠字符。 2. allowUrlEncodedPercent:设置是否允许URL中的百分号字符进行编码。默认情况下,不允许编码百分号字符。 3. allowUrlEncodedPeriod:设置是否允许URL中的点号字符进行编码。默认情况下,不允许编码点号字符。 4. rejectInvalidUtf8:设置是否拒绝包含无效UTF-8编码的请求。默认情况下,拒绝无效UTF-8编码的请求。 除了以上属性外,StrictHttpFirewall还提供了其他一些有关编码和解码处理的方法。 总之,StrictHttpFirewallSpring Security中的一种HTTP防火墙,用于过滤和处理HTTP请求中的特殊字符和编码,以保护Web应用程序的安全性。 ### 回答3: StrictHttpFirewallSpring Security 提供的一个过滤器,用于实现 HTTP 请求的严格安全策略。 StrictHttpFirewall 可以设置多个安全策略,包括: 1. 是否允许双斜杠:默认情况下,Spring Security 会自动将双斜杠替换为单斜杠。但是如果启用了 StrictHttpFirewall,可以拒绝双斜杠的请求。 2. 是否允许解析分号:如果启用了 StrictHttpFirewall,可以拒绝解析分号,防止 Spring Security 将分号视为路径分隔符。 3. 是否允许 URL 包含斜杠后的 "..":默认情况下,Spring Security 会剥离 URL 中的 "..",以防止路径遍历攻击。但是如果启用了 StrictHttpFirewall,可以拒绝包含 ".." 的 URL 请求。 4. 是否允许 URL 包含反斜杠:默认情况下,Spring Security 会将 URL 中的反斜杠替换为单斜杠。但是如果启用了 StrictHttpFirewall,可以拒绝包含反斜杠的请求。 通过配置 StrictHttpFirewall,可以增加系统的安全性,防止一些常见的攻击,如路径遍历攻击、安全漏洞攻击等。然而,在使用 StrictHttpFirewall 时需要谨慎,确保不会影响正常的业务功能使用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值