HttpFirewall简介
HttpFirewall是Spring Security提供的Http防火墙,它可以用于拒绝潜在的危险请求或者包装这些请求进而控制其行为。通过HttpFirewall可以对各种非法请求提前进行拦截并处理,降低损失。
- 在Servlet容器规范中,为HtpServletRequest定义了一些属性,如contextPath、servletPath、pathInfo、queryString等,这些属性都可以通过get方法获取。
- 在Servlet容器规范中并没有定义这些属性可以包含哪些值,例如在servletPath和pathInfo中都可以包含RFC2396规范(https://www.iet.orghrfc/rfic2396.txt)中定义的参数,不同容器对此处理方案也不同,有的容器会对此进行预处理,有的容器则不会。这种比较混乱的处理方式有可能会造成安全隐患,因此SpringSecurity中通过HtpFirewall来检查请求路径以及参数是否合法,如果合法,才会进入到过滤器链中进行处理。
Spring Security中的 HttpFirewall两个实现类
- DefaultHttpFirewall:虽然名字中包含Default,但这并不是框架默认使用的Http防火墙,它只是一个检查相对宽松的防火墙。普通模式使用这个防火墙。
StrictHttpFirewall:这是一个检查严格的Http防火墙,也是框架严格模式默认使用的Http防火墙。
- rejectForbiddenHttpMethod:校验请求方法是否合法。
- rejectedBlacklistedurls:校验请求中的非法字符。
- rejectedUntrustedHosts:检验主机信息。
- isNormalized:判断参数格式是否合法。
- containsOnlyPrintableAsciiCharacters:判断请求字符是否合法。