嵌入式Jetty取代了郊区

时间:2016-11-24 08:41:50

标签: embedded-jetty

您好我正在为HTTP Server提供嵌入式Jetty

出于某种原因,必须通过包含带点的郊区接收一些请求。 示例:http://127.0.0.1:10000/./test/

但是当我从码头检索郊区时,点会自动替换。

有没有办法停止更换?

由于 宰

1 个答案:

答案 0 :(得分:0)

这是servlet规范的一个黑暗角落,没有明确定义(最近有2个月前有had discussion on the servlet spec experts group mailing list!)

规范说传入的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上下文
  • getContextPath()返回/foo/context/.//..%2F..//./%62%61%72/context/servlet/info
  • getPathInfo()返回/context/.//..%2F..//./%62%61%72/context/servlet/info

该规范的丑陋部分对安全工作非常敌视,可能会在Servlet 4.0中得到改进/澄清