spring - 在处理 RESTful 请求时处理转义的 url

标签 spring api rest tomcat jersey

<分区>

使用 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/

相关文章:

java - 收到SIGTERM后如何正确关闭Spring bean?

javascript - 使用 Javascript 创建包含来自 REST API 调用的数据的表

rest - 使用 Http Post 发送状态数据是一个好习惯吗?

Spring 在设置属性之前调用对象构造函数

spring - Camel setBody 使用 Spring 配置

c++ - 具有 std::unique_ptr 的容器的访问器函数

api - Google Calendar API 400错误

python - 来自 Yelp API 的错误请求

javascript - Angular JS $http 与 SharePoint Rest 解析响应

java - Spring Boot devtools - 静态内容重新加载在 IntelliJ 中不起作用