近期主机安全扫描除了安全漏洞,如图
看到该问题的第一思路,找到具体端口号对应的应用。主机配置httpd服务信息。最终发现主机上并未开启httpd服务。应用是基于tomcat发布的,并且为springboot的内嵌tomcat。意思就是说跟主机侧无关,需要调整应用侧代码。于是百度
tomcat传统形式通过配置web.xml达到禁止不安全的http方法
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
|
Spring boot使用内置tomcat,2.0版本以前使用如下形式
@Bean public ConfigurableServletWebServerFactory configurableServletWebServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.addContextCustomizers(context -> { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); collection.addMethod("HEAD"); collection.addMethod("PUT"); collection.addMethod("DELETE"); collection.addMethod("OPTIONS"); collection.addMethod("TRACE"); collection.addMethod("COPY"); collection.addMethod("SEARCH"); collection.addMethod("PROPFIND"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); }); return factory; }
|
然后把以上代码放在启动类中,把这个内嵌tomcat的配置用以下代码修改了,重新装配到spring容器。
测试过程:做了以上修改并不知道怎么去模拟请求测试。TRACE请求没听说过,网上没有具体测试方法,如果用其他方法测试,最大可能就是报405错误。最终想到的测试方法--反测,既然代码已经支持了POST请求,那么把POST请求也放入到tomcat的禁用请求类型中测试。看看POST请求支持的效果。以下没禁用POST,响应结果正常。
禁用POST后,发现请求已经被拒绝了。就说明该代码配置能达到禁用请求类型的效果。