我们从Spring Boot应用程序的Struts 2操作返回一个@Result,该操作指定一个包含相对路径的位置,以便将同级目录中的jsp引用到应用程序其余部分的根目录。

@Result(name = "foo", location = "../../cat/bar.jsp")


这在Tomcat 7.0.78中有效,在StrictHttpFirewall.getFirewalledRequest中以以下方式到达:

ApplicationHttpRequest.requestURI = "rootParent/cat/bar.jsp"


在Tomcat 7.0.79+中,不再发生这种扁平化,并且当请求到达StrictHttpFirewall以检查url规范化时,它因为如下到达而被炸毁:

ApplicationHttpRequest.requestURI = "rootParent/root/WEB-INF/../../cat/bar.jsp"


我已经对Apache 7 changelogsecurity fixes进行了搜索,以查看是否有任何可能导致这种情况发生的事情,但是什么也找不到。我已经尝试过调整useRelativeRedirects Context属性,但是它似乎没有任何作用。在调试过程中,将我的头发拉出来,逐步通过过滤器链。任何帮助将非常感激!

最佳答案

所有这些相对路径通常都出现在安全漏洞工具中,因此它们并不是一个好主意,您可能应该停止使用它们。

就是说,如果您像a子一样固执,您仍然可以使用它们,只是不在注解本身内使用,但是如果这些文件在某处作为资源存在,则可以使用static变量来实现相同的目的:

FooBar.class.getClassLoader().getResource('../../cat/bar.jsp')

09-13 04:40