解决 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 的问题 您所在的位置:网站首页 错误的URL请求 解决 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 的问题

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

2024-04-04 21:17| 来源: 网络整理| 查看: 265

前言

本人博客园: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; } 超链接

参考文章: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="|{}[],%"

例如:(参数里有哪些特殊字符,就加哪些)

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

结语:

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有