<分区>
使用 1. Tomcat 2. Spring Jersey 整合
路径中的一个 uri 片段包含一个“/”,我通过将其替换为 %2f 正确地转义了它。但是,请求从未在我的请求处理器中正确到达。
示例 URI
/persons/bad_person_identifier%2fabcd
一个人的唯一标识符可能是“bad_person_identifier/abcd”
<分区>
使用 1. Tomcat 2. Spring Jersey 整合
路径中的一个 uri 片段包含一个“/”,我通过将其替换为 %2f 正确地转义了它。但是,请求从未在我的请求处理器中正确到达。
示例 URI
/persons/bad_person_identifier%2fabcd
一个人的唯一标识符可能是“bad_person_identifier/abcd”
最佳答案
原来是tomcat 6.x的问题
解决方法: 是设置启动tmcat的系统属性 org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH: true
问题详情:
已在 Apache Tomcat 6.0.10 中修复
重要:目录遍历 CVE-2007-0450
Tomcat 允许“\”、“%2F”和“%5C”作为路径分隔符。当 Tomcat 在配置为仅代理某些上下文的代理(包括但不限于具有 mod_proxy 和 mod_jk 的 Apache HTTP 服务器)后面使用时,包含“/../”等字符串的 HTTP 请求可能允许攻击者绕过上下文限制代理,并访问非代理上下文。
Tomcat 添加了以下 Java 系统属性,以提供对 URL 中路径定界符处理的额外控制(这两个选项默认为 false):
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH:真|假 org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH:真|假 由于无法保证所有 URL 都由 Tomcat 处理,因为它们在代理服务器中,因此应始终保护 Tomcat,就好像没有使用限制上下文访问的代理一样。
影响:6.0.0-6.0.9
关于spring - 在处理 RESTful 请求时处理转义的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967888/