問題背景:
爲了應對最近Tomcat重大漏洞的解決問題,tomcat8需要升級至最新tomcat8.5.51纔可以修復該漏洞,但是我們系統運行在該版本上,會出現一個路徑中有異常字符的報錯,報錯內容如下:
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
出現該問題的原因:
Tomcat在 7.0.73, 8.0.39, 8.5.7 版本後,在http解析時做了嚴格限制。
RFC3986文檔規定,請求的Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。
而我們請求地址中由於路徑中有特殊符號,導致在默認的情況下,地址的路徑寫法違反了RFC3986文檔規定,導致出現了上述的報錯。
解決方法:
方案一:
降低tomcat的版本,將相關的tomcat的版本降低到Tomcat在 7.0.73, 8.0.39, 8.5.7 版本前,就可以避免了這個問題,該方法可以一了百了的解決問題,但是問題是很多老版本的tomcat存在重大漏洞,故在本次任務中該方案並不適用。
方案二:
到tomcat的conf目錄下,找到server.xml文件,
然後在<Connector>標籤中假如兩個屬性,內容如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
relaxedPathChars="[]^{|}"
relaxedQueryChars="[]^{|}"
/>
至此,我們啓動tomcat後,進入登錄界面,點擊登錄按鈕以後,就不會出現“undefined”的報錯了,就可以正常的登錄了。
解決該問題的依據在tomcat的官網上具有相關的說明,如下圖:
該截圖對應的官方地址爲:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html