您好,我正在提供HTTP服务器与嵌入式码头嵌入式码头替换郊区
由于某些原因,一些请求必须与郊区包含点接收。 例如:http://127.0.0.1:10000/./test/
但是,当我从码头检索郊区,点自动更换。
有什么方法可以停止更换?
感谢 宰
您好,我正在提供HTTP服务器与嵌入式码头嵌入式码头替换郊区
由于某些原因,一些请求必须与郊区包含点接收。 例如:http://127.0.0.1:10000/./test/
但是,当我从码头检索郊区,点自动更换。
有什么方法可以停止更换?
感谢 宰
这是没有很好地界定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
- > ??码头目前正常化下来到/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中进行改进/澄清