前言
今天因解決漏洞而更新了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
結語:
記得對傳遞參數進行過濾,防止他人插入腳本代碼