现在针对特殊字符的处理主要是分为两种,一种为"/\"正斜 反斜,另一种是除这两个之外的包括#!^等其他特殊字符,不同的tomcat版本处理方式不一样,现以tomcat7.0.76和tomcat8.5.11为例,字符都是指encode后的。tomcat7可以处理第二种,tomcat8不能处理第二种会报 java.lang.IllegalArgumentException: Invalid character found in the request
target. The valid characters are defined in RFC 7230 and RFC 3986 异常。现在如果修改tomcat 的相关安全属性
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true,tomcat7和tomcat8都支持第一种和第二种。tomcat默认这两个属性false,应该考虑安全性
http://tomcat.10.x6.nabble.com/Tomcat-8-0-39-and-tomcat-8-5-8-fails-handling-requsest-td5057320.html
http://dev.tomcat.apache.narkive.com/K40XgxSt/bug-60362-new-missing-reason-phrase-in-response
tomcat 缺少reasonPhrase也是tomcat 版本问题导致。
tomcat get请求问题:
-Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
Tomcat 7.0.76, 8.0.42, 8.5.12 you can define property requestTargetAllow to allow forbiden characters. 让它支持|字符
网友评论