记录一次Tomcat 8.45 Invalid character found in the request target.遇到得坑

问题描述:

项目web容器使用得是Tomcat8.45,项目上线前使用AWVS扫了一下,其中有一个Application error message中危安全漏洞,会暴露服务器版本等信息。原因是awvs发了个请求,请求项目得某个静态资源文件,如:/project/a.jpg,但是它传了个参数12345'"\'\");|]*%00{%0d%0a%bf%27'e???,完整的请求如下:

http://ip:port/project/a.jpg?12345'"\'\");|]*%00{%0d%0a%bf%27'e???,这个请求因为包含了{} []等字符导致400 bad request

网上查了查:这是因为Tomcat严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。传入的参数中有"{"不在RFC3986中的保留字段中,所以会报这个错。

 

解决思路:

       案例来说这种错误信息在项目得web.xml或者tom猫得web.xml配置个<error-page>即可,但是无论我如何配置,其他得错误都可以跳转到配置好得错误页面,唯独这个请求不跳转错误页面,依然我行我素的使用tomcat默认的错误页面。

       然后接着网上查资料,给出的解决办法如下:Tomcat 7.0.76, 8.0.42, 8.5.12 这些版本之后可以定义requestTargetAllow 属性来允许禁止的字符。在tomcat的 catalina.properties文件中添加这一句:

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

   出乎意料之外,依然不好使。。。。。。。。。。。。。我都要炸了。

   最后天我绝人之路,查看官方文档的tomcat.util.http.parser.HttpParser.requestTargetAllow说明发现一段话This system property is deprecated. Use the relaxedPathChars and relaxedQueryChars attributes of the Connector instead

激动啊,然后修改server.xml文件,Connector属性增加relaxedQueryChars配置,修改为如下:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;" redirectPort="8443" />

问题解决。

 

补充一句:在下现在还搞不清配置好的错误页面为什么不跳转,欢迎大家留言赐教,或者邮箱交流504788748@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值