web-dev-qa-db-ja.com

Tomcat 8.5のURLで^文字を許可する方法

次の形式のリクエストURLがあります

http://hostname:port/path&param1={"vars":[{"a":"val1","b":"^"},{"c":"val2","d":"^"}]}&param2=Value3|95|3%20-%206%20Months

この stackoverflow question に従ってcatalina.propertiesを変更しました。

しかし TomcatのドキュメントTomcat.util.http.parser.HttpParser.requestTargetAllowプロパティは廃止され、relaxedPathCharsおよびrelaxedQueryChars属性は、代わりにConnectorタグで使用されます。

ただし、xmlファイルを以下に変更すると

 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" relaxedQueryChars="^" relaxedPathChars="^"/>

キャラクターに対して400の悪いリクエストがまだあります^

これが正しい構成かどうかはわかりません。

11
Sachin Kumar

サーバーにリクエストを送信する前に、クエリパラメータを常にURLエンコードするのが理想的です。読む: https://www.talisman.org/~erlkonig/misc/lunatech%5Ewhat-every-webdev-must-know-about-url-encoding/

RelaxedQueryCharsルートをたどる場合は、クエリからの次の文字も例外に追加する必要があるセットに含まれていることに注意してください:" { } [ ] ^ |

Server.xmlでこれを試してください。

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

バグチケット6227 のrelaxedQueryChars/relaxedPathCharsの詳細情報。変更はTomatのすべてのブランチに追加されました。

  • 9.0.8
  • 8.5.31
  • 8.0.52
  • 7.0.87

RelaxedPathChars属性はまったく必要ないと思います(これはURLパス上の文字を指します)。ただし、 Tomcatチームのテスト結果 は、後方互換性を最大化するために以下を使用できることを示唆しているようです。

relaxedPathChars='[]|' relaxedQueryChars='[]|{}^&#x5c;&#x60;&quot;&lt;&gt;' />

nb /クエリの最初の引数は、?しない&

http://hostname:port/path?param1=...&param2=...&param3=...

22
Ed Randall