为什么Apache Tomcat将编码斜杠(%2F)作为路径分隔符处理?

时间:2013-10-24 21:14:29

标签: security tomcat servlets uri percent-encoding

Apache Tomcat(至少在Tomcat 6 参见脚注之前)在URI路径中处理百分比编码的斜杠(%2F),就像常规斜杠一样(即作为路径分隔符)。

所以,例如可以在

访问Tomcat的servlets示例页面
  • http://localhost:8080/examples/servlets/
  • http://localhost:8080/examples%2Fservlets/

这对我没有意义。编码保留字符(如“/”)的百分比编码的全部要点是避免将其视为保留字符(在本例中为路径分隔符)。除此之外,此行为是(一)导致漏洞CVE-2007-0450的原因。但是,我认为一定有这样的理由。

  • 为什么Tomcat将%2F作为路径分隔符处理(确定,用于处理)?

  • 是否存在某种情况,这种行为有帮助?


脚注:我意识到由于CVE-2007-0450,Tomcat的默认行为已更改为拒绝路径中的百分比编码斜杠。但是,如果禁用此检查(ALLOW_ENCODED_SLASH),则旧行为仍然存在。

1 个答案:

答案 0 :(得分:8)

这与Tomcat何时支持httpd反向代理有关。在某些情况下,URI被部分编码,因此必须使用%2F处理来撤消该编码。

它创建了许多安全问题,这些问题在修复CVE-2007-0450的同时修复。有关背景信息,请查看mod_jk文档中的ForwardURIxxx选项:http://tomcat.apache.org/connectors-doc/reference/apache.html这涵盖了您仍可能需要此功能的一些情况(但由于可能的安全问题,如果可能的话我会避免它。)< / p>

默认行为是httpd将URI传递给Tomcat,而Tomcat则将处理后的编码字符完全传递给它。