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),则旧行为将保留。
这与Tomcat在httpd反向代理后面的时间有关。在某些情况下,URI 已部分编码,因此必须使用 %2F 处理来撤消该编码。
它产生了许多安全问题,这些问题在修复CVE-2007-0450的同时得到修复。有关背景信息,请查看mod_jk文档中的 ForwardURIxxx 选项: http://tomcat.apache.org/connectors-doc/reference/apache.html 这涵盖了您可能仍然需要此功能的几种情况(但由于可能存在的安全问题,如果可能的话,我会避免使用它)。
默认行为现在是httpd,以将URI传递给Tomcat不变,并且Tomcat将编码字符视为完全相同。