【发布时间】:2016-11-28 22:25:45
【问题描述】:
您好,我正在提供带有嵌入式 Jetty 的 HTTP 服务器
由于某种原因,必须使用包含点的子网址来接收某些请求。 示例:http://127.0.0.1:10000/./test/
但是当我从码头检索子网址时,点会自动替换。
有什么办法可以停止替换?
谢谢 杰
【问题讨论】:
标签: embedded-jetty
您好,我正在提供带有嵌入式 Jetty 的 HTTP 服务器
由于某种原因,必须使用包含点的子网址来接收某些请求。 示例:http://127.0.0.1:10000/./test/
但是当我从码头检索子网址时,点会自动替换。
有什么办法可以停止替换?
谢谢 杰
【问题讨论】:
标签: embedded-jetty
这是 servlet 规范的一个阴暗角落,定义不明确(最近还有 had discussion on the servlet spec experts group mailing list 2 个月前!)
规范说传入的 URL 在与 contextPath 或 urlPattern 匹配之前必须“标准化”。
出于多种原因(规范要求、安全性、防止在上下文之外访问、清理目录遍历、正确应用约束等)进行 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 上下文/foo/context/.//..%2F..//./%62%61%72/context/servlet/info
/context/.//..%2F..//./%62%61%72/context/servlet/info
规范中这个丑陋的部分对安全工作非常不利,很可能会在 Servlet 4.0 中得到完善/澄清
【讨论】: