【Tomcat】 GET請求URL具有特殊字元 ,返回HTTP 400錯誤

常見問題

問題陳述

GET 發出請求後,Burp軟體攔截,於參數加入雙引號( ” ),送出後tomcat報錯,未正確導頁至自訂頁面。報錯:

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

Tomcat 版本問題

  • Tomcat 7.0.73 之後的版本才遵循 RFC 7230 和 RFC 3986 。
  • Tomcat 7.0.73 之前的早期版本的Tomcat 沒辦法重現這個問題。

tomcat 7 添加了RFC 3986的規範,RFC 3986文獻中,對Url的編解碼問題做出了詳細建議,指出了哪些字元需要被編碼。

RFC 3986文獻規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符(! * ‘ ( ) ; : @ & = + $ , / ? # [ ])。

然而, requestTargetAllow 只能配置 |、{、} 允許這三個字符,對於其他的(例如 ” < > [ \ ] ^ ` { | } .),在請求時,仍然攔截,如果使用了 | { } 之外的其他字符那怎麼辦呢?

解決方法

第一步:於tomcat 裡 server.xml 在Host 標籤裡面添加屬性

<Valve className="org.apache.catalina.valves.ErrorReportValve"
        errorCode.400="webapps/ROOT/error400.html"
        errorCode.0="webapps/ROOT/errorOthers.html"
        showReport="false"
        showServerInfo="false" />

第二步:此外於tomcat裡面webapps/ROOT 添加 HTML頁面

叮嚀:如本文對您有幫助,請幫忙按個廣告。

Related Posts

One thought on “【Tomcat】 GET請求URL具有特殊字元 ,返回HTTP 400錯誤

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js