2

バグを見つけて次のコードで警告を報告する静的分析ツールを使用しています

response.sendRedirect(response.encodeRedirectURL(redirectToXXX));

警告は言う:

このコードは、HTTPパラメーターをHTTPヘッダーに直接書き込みます。これにより、HTTP応答分割の脆弱性が発生します。

しかし、私がこのようにそれを行うとき:

redirectToXXX= java.net.URLEncoder.encode(redirectToXXX.toString(),"ISO-8859-1");
response.sendRedirect(response.encodeRedirectURL(redirectToXXX));

警告が消えます。

私が理解していないのはencodeRedirectURL、必要に応じてURLをエンコードすることになっているのに、なぜそれが警告を生成し、URLEncoder.encodeでエンコードされたときに警告を削除するのかということです。

4

2 に答える 2

2

2番目のケースではURLEncoder.encode、リクエストから取得しているパラメーターに含まれる可能性のあるCRとLFを削除するため、警告が消えると思います。

HTTP 応答分割の脆弱性の背景を理解するために、これを読むことをお勧めします。
への呼び出しURLEncoder.encodeは新しいオブジェクトを返すため、FindBugs はその変数を HTTP リクエストの内容に再変換しないため、安全であると見なされます。

于 2012-05-09T12:42:53.257 に答える
1

redirectToXXXキャリッジリターンまたはラインフィードが含まれていると思います。それを削除して、もう一度やり直してください。

于 2012-05-09T12:38:11.037 に答える