%2F
の16進コードである/
を持つURLがJBOSSサーバーに投稿されるたびに、エラーが発生します。
HTTP 400 Bad Request error message.
URLは次のとおりです。
http://localhost:8080/application/**abc%2Fhi**?msg=hello"
URLから%2F
を削除すると、リンクは正常に機能します。
この%2F
はURLの一部である必要があり、リクエストパラメータにすることはできません。
最後に、これの原因を突き止めました(JBossとApacheの両方)。どちらのアプリケーションも、エンコードされたスラッシュ(%2F
にとって /
および%5C
にとって \
)セキュリティの脆弱性を防ぐため。
リンク:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-045
http://securitytracker.com/id/101811 (セクション4をご覧ください。解決策)
そして、JBossでこの動作を有効にするために提供される手順は次のとおりです。
注:CVE-2007-0450に対応して、JBoss ASはURLでエンコードされたスラッシュとバックスラッシュを無効と見なし、その使用によりHTTP400エラーが発生します。以下に概説する手順に従うことで、エンコードされたスラッシュとバックスラッシュを許可することができますが、そうすると、CVE-2007-0450関連の攻撃にさらされることになります。
a)/var/lib/jbossas/bin/run.shセットアップを使用する場合は、/ etc/jbossas /run.confを編集して追加してください
--- Dorg.Apache.Tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true
--- Dorg.Apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = Java_OPTSに割り当てられた文字列に対してtrue
b)initスクリプト設定を使用して複数のJBoss ASサービスを実行し、すべてのサービスでデフォルトでエンコードを許可する場合は、/ etc/jbossas/jbossas.confを編集して、Java_OPTS = "$ {Java_OPTS}という行を追加してください。
--- Dorg.Apache.Tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true
--- Dorg.Apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = true "
c)initスクリプト設定を使用して複数のJBoss ASサービスを実行し、特定のサービスのスラッシュとバックスラッシュのエンコードを許可する場合は、/ etc/sysconfig/$ {NAME}(NAMEはサービスの名前)を編集してください。次の行を追加しますJava_OPTS = "$ {Java_OPTS} --- Dorg.Apache.Tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true --- Dorg.Apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = true"
Apacheの場合、Apacheconfまたはvhostconfのどこかに「AllowEncodedSlashesNoDecode」を設定するのと同じくらい簡単です(ただし、.htaccessでは機能しません)。
Apacheリンク: http://httpd.Apache.org/docs/current/mod/core.html#allowencodedslashes