Invalid character... request target. The valid characters are defined in RFC 7230 and RFC 3986

 

問題背景:

爲了應對最近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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章