解決 在請求目標中找到無效字符。有效字符在RFC 7230和RFC 3986中定義 的問題

前言

今天因解決漏洞而更新了Tomcat,運行網站就報錯

類型 異常報告

消息 在請求目標中找到無效字符。有效字符在RFC 7230和RFC 3986中定義

描述 由於被認爲是客戶端對錯誤(例如:畸形的請求語法、無效的請求信息幀或者虛擬的請求路由),服務器無法或不會處理當前請求。

例外情況
java.lang.IllegalArgumentException: 在請求目標中找到無效字符。有效字符在RFC 7230和RFC 3986中定義

 如圖所示:

可能的原因是超鏈接帶了特殊字符或中文

第一部分 因超鏈接參數帶中文而報錯

通過腳本來將href超鏈接傳遞的參數轉換爲from表單提交

 1 function linkClick(linkObject) {
 2 
 3     var formObject = document.createElement('form');
 4     document.body.appendChild(formObject);
 5      formObject.setAttribute('method', 'post');
 6      var url = linkObject.href;
 7      var uri = '';
 8      var i = url.indexOf('?');
 9 
10      if(i == -1) {
11         formObject.action = url;
12      } else {
13         formObject.action = url.substring(0, i);
14      }
15 
16      if( i >= 0 && url.length >= i + 1) {
17         uri = url.substring(i + 1, url.length);
18      }
19 
20      var sa = uri.split('&');
21 
22      for(var i = 0; i < sa.length; i++) {
23        var isa = sa[i].split('=');
24        var inputObject = document.createElement('input');
25        inputObject.setAttribute('type', 'hidden');
26        inputObject.setAttribute('name', isa[0]);
27        inputObject.setAttribute('value', isa[1]);
28        formObject.appendChild(inputObject);
29      }
30 
31      formObject.submit();
32 
33      return false;
34 }

 超鏈接中加入onclick="return linkClick(this)

1 <a href='/Servlet?name=中文' onclick="return linkClick(this)">超鏈接</a>

 

參考文章:https://blog.csdn.net/weixin_45986454/article/details/107950262?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control

 

 

第二部分 超鏈接參數帶特殊字符而報錯

參數中可能包含了  |{}[],% 等一些特殊字符

修改Tomcat的server.xml文件

向server.xml 中Connector添加

relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%"

例如:(參數裏有哪些特殊字符,就加哪些)

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
           relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%"
    />

 

參考文章:https://blog.csdn.net/qq_39089749/article/details/108726996

結語:

記得對傳遞參數進行過濾,防止他人插入腳本代碼

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