解决 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 的问题

news/2024/11/29 20:41:58/

前言

本人博客园:https://www.cnblogs.com/lzj523/
本文博客园原文章:https://www.cnblogs.com/lzj523/p/14283076.html

今天因解决漏洞而更新了Tomcat,运行网站就报错

类型 异常报告

消息 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。

例外情况
java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

如图所示:
在这里插入图片描述

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

第一部分 因超链接参数带中文而报错

通过脚本来将href超链接传递的参数转换为from表单提交

function linkClick(linkObject) {var formObject = document.createElement('form');document.body.appendChild(formObject);formObject.setAttribute('method', 'post');var url = linkObject.href;var uri = '';var i = url.indexOf('?');if(i == -1) {formObject.action = url;
} else {formObject.action = url.substring(0, i);}if( i >= 0 && url.length >= i + 1) {uri = url.substring(i + 1, url.length);}var sa = uri.split('&');for(var i = 0; i < sa.length; i++) {var isa = sa[i].split('=');var inputObject = document.createElement('input');inputObject.setAttribute('type', 'hidden');inputObject.setAttribute('name', isa[0]);inputObject.setAttribute('value', isa[1]);formObject.appendChild(inputObject);}formObject.submit();return false;
}
<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

注:部分浏览器若传参出现urlencode编码,且不想出现这个编码时

27        inputObject.setAttribute('value', isa[1]);

改为

    inputObject.setAttribute('value', decodeURIComponent(isa[1]));

java解码

java.net.URLDecoder.decode(mytext,“utf-8”)

第二部分 超链接参数带特殊字符而报错

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

修改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

结语:

记得对传递参数进行过滤,防止他人插入脚本代码


http://www.ppmy.cn/news/416298.html

相关文章

解决 tomcat: the valid characters are defined in RFC 7230 and RFC 3986

文件下载功能&#xff0c;本地跑是正常的&#xff0c;部署到服务器后下载报错 大概意思为&#xff1a;在请求目标中找到无效字符&#xff0c;有效字符在RFC 7230和RFC 3986中定义。 就是说http请求的url中有非法字符&#xff0c;我请求的url中有&#xff1f;&#xff0c;\&…

spring boot 解决Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986 的问题

tomcat 8.0以后对请求URL做了严格的过滤 就是严格按照 RFC 3986规范进行访问解析&#xff0c;而 RFC 3986规范定义了Url中只允许包含英文字母&#xff08;a-zA-Z&#xff09;、数字&#xff08;0-9&#xff09;、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保…

The valid characters are defined in RFC 7230 and RFC 3986

今天发现一个问题&#xff0c;项目在我本地以及正式环境单机访问都是没有问题的&#xff0c;但是通过nginx统一访问&#xff0c;就会报如下错误&#xff1a;org.apache.tomcat.util.http.parser.HttpParser.<clinit> Character ["] is not allowed and will continu…

接口报错:The valid characters are defined in RFC 7230 and RFC 3986

1.起始&#xff1a;线上突然收到用户反馈&#xff0c;一个文件上传合并接口报错&#xff0c;其他文件无异常&#xff0c;该文件经多次重试仍无法成功 2.排查&#xff1a;查看前端nginx日志无异常&#xff0c;查看后台日志发现该用户使用该接口有报错情况 3.具体报错&#xff1a…

RFC 7230 and RFC 3986 各版本tomcat解决方法

项目从原先的jdk1.6tomcat6(6.0.26) 升级为jdk1.8tomcat9(9.022)。升级完后在tomcat日志中发现经常会出现RFC 7230 and RFC 3986 这个错误。于是在网上搜集资料&#xff0c;做个总结。 首先出现这个问题是原因高版本的tomcat会严格按照对RFC 3986规范进行访问解析。 RFC 3986规…

The HTTP header line [connection : Keep-alive] does not conform to RFC 7230 and has been ignored

在测试一个程序的时候&#xff0c;出现了“The HTTP header line [connection : Keep-alive] does not conform to RFC 7230 and has been ignored”这个错误&#xff1b;经搜索关键字 RFC 7230发现是tomcat高版本中&#xff0c;严格按照规范解析。 百度了一下解决方案&#x…

解决 Tomcat 7230 and 3986 错误异常

今天&#xff0c;我们来讲一下&#xff0c;tomcat 版本过高而引发的7230和3986 的错误 &#xff0c;这个错误是我更换了浏览器之后所引发的异常错误信息&#xff0c;所以就在这里跟大家讲一下&#xff1a; 一、原因浏览器从谷歌更换成内部浏览器&#xff0c; 图示&#xff1a;…

从7290转为7230

好久没有写博客了,一是不知道该写什么,二是没有时间,买房子、结婚、加班。劳累的生活&#xff01;转入正题&#xff0c;原来的blackberry送人了&#xff0c;五月份又入手了一台全新7230。 7230和7290从外观上非常接近&#xff0c;外观上最大的不同点就是&#xff1a;1、背光按…