java.lang.IllegalArgumentException: 在请求目标中发现无效字符。有效字符在 RFC 7230 和 RFC 3986 中定义

Raw*_*Raw 12 tomcat

java.lang.IllegalArgumentException: 
Invalid character found in the request target. 
The valid characters are defined in RFC 7230 and RFC 3986
Run Code Online (Sandbox Code Playgroud)

该异常是在Get URLs 中传入中文引起的。如何在 tomcat 中解决此问题?

我们不想降低Tomcat版本并要求我们的客户对参数进行编码。

有没有办法通过更改 tomcat 中的配置来解决这个问题?

Zac*_*aig 8

看起来开箱即用的 Tomcat 不允许使用这些字符,正如您所见,浏览一下这个问题似乎意味着您可以更改此行为,编辑catalina.properties并定义requestTargetAllow参数,如下所示:

\n\n
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是,这看起来只是一长串您想要允许的字符,所以如果您希望所有中文字符都在那里,根据维基百科,您将有一个相当长的列表:

\n\n
\n

在使用简体中文字符的中国, Xi\xc3\xa0nd\xc3\xa0i H\xc3\xa0ny\xc7\x94\n Ch\xc3\xa1ngy\xc3\xb2ng Z\xc3\xacbi\xc7\x8eo (\ xe7\x8e\xb0\xe4\xbb\xa3\xe6\xb1\x89\xe8\xaf\xad\xe5\xb8\xb8\xe7\x94\xa8\xe5\xad\x97\xe8\xa1\xa8,图表《现代汉语常用字》列出了 2,500 个常用字和 1,000 个罕见字\n,而 Xi\xc3\xa0nd\xc3\xa0i H\xc3\xa0ny\xc7\x94 T\xc5\x8dngy\xc3 \xb2ng Z\xc3\xacbi\xc7\x8eo (\xe7\x8e\xb0\xe4\xbb\xa3\xe6\xb1\x89\xe8\xaf\xad\xe9\x80\x9a\xe7\x94\xa8\xe5 \xad\x97\xe8\xa1\xa8,现代汉语常用字表\n)列出了7,000\n个字符,包括上面已经列出的3,500个字符。

\n
\n


Mar*_*mas 6

在 Tomcat 中没有办法解决这个问题。这些请求不符合规范,因此 Tomcat 不会允许它们。围绕系统中不同组件对此类 URL 的不同反应的安全问题由来已久。通常采用标头和/或请求注入的形式。如此一来,Tomcat 的 URL 解析就被收紧了,放宽的可能性极小。

出于同样的原因,httpd 正朝着相同的方向发展。

最好的长期选择是向客户端指出他们发送的请求不符合规范,他们需要修复它们(通过使用适当的 %nn 编码)。在 Tomcat 端,确保 Tomcat 使用的是 UTF-8。这是较新版本的默认设置。您可能需要在旧版本上显式设置它。