java - Struts 相对路径在 7.0.78 中变平,但在 7.0.79 中没有变平,打破了 isNormalized

标签 java spring tomcat struts2 tomcat7

我们从 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 属性,但似乎没有任何效果。在调试中逐步通过过滤器链,让我大吃一惊。任何帮助将不胜感激!

最佳答案

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

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

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

关于java - Struts 相对路径在 7.0.78 中变平,但在 7.0.79 中没有变平,打破了 isNormalized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59976791/

相关文章:

java - ServletContext 变量对其他 servlet 不可见

java 。引用不带参数的方法

java - 无法在Spring集成中的service-activator上设置 "input-channel"?

spring - 使用 Spring MVC 时无法让 Tomcat 提供一些静态文件

tomcat - 在类路径上未检测到 Spring WebApplicationInitializer 类型 - GEONETWORK 3.6 - CENTOS7

java - Java中同时输出节点、左子节点和右子节点

java - Spring在测试中不调用@Bean方法

java - Spring Framework 中邮件的重音支持

xml - Tomcat 6和7动态web项目eclipse

java - 如何使用 Maven 程序集插件向类路径 MANIFEST 条目添加前缀?