目录遍历安全问题

Emm*_*ini 8 java security

我有一个Java webapp,它容易受到URL编码的目录横向(又名路径横向)攻击.经过身份验证后:

  • 如果我点击http:// localhost:8080/Web/WEB-INF/web.xml,我得到404(很好)
  • 如果我点击http:// localhost:8080/Web /%c0%ae/WEB-INF/web.xml,我可以读取文件(显然不是很好)

根据Servlet规范,WEB-INF文件夹不应该公开访问,但在某种程度上它适用于这种情况.我正在使用带有Java 1.4,Spring Security 2.0.5和Struts 1.3的Websphere 5.1.从我读到的,它似乎与编码有关,%c0%ae是'.' (点)UTF-8.

我在不同的webapp上尝试了相同的东西,它运行在不同的环境中(Tomcat 6与Java 7,Spring Security 3和Spring MVC),我无法重现这个问题.第二个webapp有一个过滤器强制编码UTF-8(org.springframework.web.filter.CharacterEncodingFilter)中的页面,所以我在第一个webapp上尝试了相同的配置,但它没有做到这一点.有任何想法吗?

谢谢.

Emm*_*ini 2

我要回答我自己的问题。
因此,由于我的选项有限,我最终所做的就是在 Spring Security 配置文件中添加一条安全规则,例如

<sec:intercept-url pattern="/**/WEB-INF/**" access="no-access"/>
Run Code Online (Sandbox Code Playgroud)

它将对 WEB-INF 的访问限制为“无访问”角色,而这实际上不是一个角色。这会阻止所有用户的访问。它并不理想,但在升级之前可以解决问题。