如何修复使用Spring Security保护的应用程序中报告的OWASP不安全临时文件问题
我正在使用IBM AppScan查找使用Spring Security的应用程序中的潜在漏洞。AppScan报告了应用程序的不安全临时文件下载问题 该工具报告,对URL的请求(如contact us.1、contact us.~1、contact-us.bak等)会以HTTP状态代码200和相同的内容进行响应。有问题的应用程序确实有一个映射到URL Contact Us的Contact Us页面。页面的控制器代码如下所示:如何修复使用Spring Security保护的应用程序中报告的OWASP不安全临时文件问题,spring,spring-mvc,spring-boot,spring-security,Spring,Spring Mvc,Spring Boot,Spring Security,我正在使用IBM AppScan查找使用Spring Security的应用程序中的潜在漏洞。AppScan报告了应用程序的不安全临时文件下载问题 该工具报告,对URL的请求(如contact us.1、contact us.~1、contact-us.bak等)会以HTTP状态代码200和相同的内容进行响应。有问题的应用程序确实有一个映射到URL Contact Us的Contact Us页面。页面的控制器代码如下所示: @RequestMapping(value = UrlContraint
@RequestMapping(value = UrlContraints.URL_CONTACT_US, method = RequestMethod.GET)
public String contactUs(HttpServletRequest request
, HttpServletResponse response) throws IOException {
return "pages/home/contact-us";
}
努力
我已将此代码段放入Spring安全配置中,但它不起作用
.authorizeRequests().antMatchers("*.ARC", "*.arc", "*.BAC", "*.bac"
, "*.BACKUP", "*.backup"
, "*.bak", "*.BAK"
, "*.inc", "*.include"
, "*.save", "*.sav", "*.tar.lzma", "*.tmp"
, "*.temp", "*.TMP"
, "*.wim", "*.1", "*.a"
, "*.lst", "*.lzma", "*.old", "*.-old"
, "*.OLD", "*.-OLD", "*.old2"
, "*.orig", "*.ORIG", "*.htm", "*.html"
"*.txt"
, "*.$*", "*.~*", "*.0", "*.ar")
.denyAll()
但这也不起作用
.authorizeRequests().antMatchers("*.ARC", "*.arc", "*.BAC", "*.bac"
, "*.BACKUP", "*.backup"
, "*.bak", "*.BAK"
, "*.inc", "*.include"
, "*.save", "*.sav", "*.tar.lzma", "*.tmp"
, "*.temp", "*.TMP"
, "*.wim", "*.1", "*.a"
, "*.lst", "*.lzma", "*.old", "*.-old"
, "*.OLD", "*.-OLD", "*.old2"
, "*.orig", "*.ORIG", "*.htm", "*.html"
"*.txt"
, "*.$*", "*.~*", "*.0", "*.ar")
.denyAll()
请帮助我如何解决此问题。Spring MVC默认执行。*后缀模式匹配,以便映射到contact us的控制器方法也隐式映射到contact us。*。这一点已在下文的相关部分中明确指出
默认情况下,Spring MVC执行.*后缀模式匹配,以便
映射到/person的控制器也隐式映射到/person.*。
然后使用文件扩展名解释请求的内容类型
用于响应,即代替Accept标头,例如。
/person.pdf、/person.xml等
如果这是不需要的,文档本身也提供了解决方案:
要完全禁用文件扩展名的使用,必须同时设置以下两项:
useSuffixPatternMatchingfalse,请参阅路径匹配配置器
favorPathExtensionfalse,请参阅ContentNeogiationConfigurer
Java配置
XML配置
两者都是一样的。我想修复不安全的临时文件。我并没有任何链接,相反,工具尝试触发类似这些URL的东西联系我们。1,联系我们。~1,contact-us.bak等,并从应用程序获得200 OK响应。我想解决这个问题。实际上,如果url是contact us,它将返回与contact us页面相同的页面。~1 etc表示contact us前缀。如果url匹配不存在,则返回404页。是。我有,它工作得很好。
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
...
<property name="favorPathExtension" value="false" />
</bean>
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
...
<mvc:path-matching suffix-pattern="false" />
</mvc:annotation-driven>