您好,我正在提供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中進行改進/澄清