嵌入式 Jetty 取代 suburl
Embedded Jetty replacing suburl
您好,我正在为 HTTP 服务器提供嵌入式 Jetty
出于某种原因,某些请求必须使用包含点的 suburl 来接收。
示例:http://127.0.0.1:10000/./test/
但是当我从 jetty 检索 suburl 时,该点会被自动替换。
有什么办法可以停止替换吗?
谢谢
载
这是 servlet 规范的一个暗角,定义不明确(最近 had discussion on the servlet spec experts group mailing list 2 个月前!)
规范规定,在与 contextPath 或 urlPattern 匹配之前,传入的 URL 必须是 "normalized"。
规范化 URI/URL 出于多种原因(规范要求、安全性、防止上下文之外的访问、清理目录遍历、正确应用约束等)
规范化的事物(假设在 /foo
和 /bar
以及 /
部署了 3 个上下文):
/foo
-> /foo/
/foo/../bar/
-> /bar/
/foo/../../../etc/passwd
-> /etc/passwd
/foo/css//main.css
-> /foo/css/main.css
/foo/app/./css/./widget.css
-> /foo/app/css/widget.css
然后拿下这个怪物...
/foo/context/.//..%2F..//./%62%61%72/context/servlet/info
-> ??
Jetty 目前将其规范化为 /bar/context/servlet/info
,但对 servlet 规范的最严格解释(在 servlet 规范实施者中非常不受欢迎的解释!)说它应该:
- 匹配
/foo
上下文
- getContextPath() returns
/foo/context/.//..%2F..//./%62%61%72/context/servlet/info
- getPathInfo() returns
/context/.//..%2F..//./%62%61%72/context/servlet/info
规范中这个丑陋的部分对安全工作非常不利,很可能 refined/clarified 在 Servlet 4.0
中
您好,我正在为 HTTP 服务器提供嵌入式 Jetty
出于某种原因,某些请求必须使用包含点的 suburl 来接收。 示例:http://127.0.0.1:10000/./test/
但是当我从 jetty 检索 suburl 时,该点会被自动替换。
有什么办法可以停止替换吗?
谢谢 载
这是 servlet 规范的一个暗角,定义不明确(最近 had discussion on the servlet spec experts group mailing list 2 个月前!)
规范规定,在与 contextPath 或 urlPattern 匹配之前,传入的 URL 必须是 "normalized"。
规范化 URI/URL 出于多种原因(规范要求、安全性、防止上下文之外的访问、清理目录遍历、正确应用约束等)
规范化的事物(假设在 /foo
和 /bar
以及 /
部署了 3 个上下文):
/foo
->/foo/
/foo/../bar/
->/bar/
/foo/../../../etc/passwd
->/etc/passwd
/foo/css//main.css
->/foo/css/main.css
/foo/app/./css/./widget.css
->/foo/app/css/widget.css
然后拿下这个怪物...
/foo/context/.//..%2F..//./%62%61%72/context/servlet/info
-> ??
Jetty 目前将其规范化为 /bar/context/servlet/info
,但对 servlet 规范的最严格解释(在 servlet 规范实施者中非常不受欢迎的解释!)说它应该:
- 匹配
/foo
上下文 - getContextPath() returns
/foo/context/.//..%2F..//./%62%61%72/context/servlet/info
- getPathInfo() returns
/context/.//..%2F..//./%62%61%72/context/servlet/info
规范中这个丑陋的部分对安全工作非常不利,很可能 refined/clarified 在 Servlet 4.0
中