最近の findbugs (FB) の実行後、次のことを訴えます:セキュリティ - HTTP 応答分割の脆弱性次のコードがトリガーされます:
String referrer = req.getParameter("referrer");
if (referrer != null) {
launchURL += "&referrer="+(referrer);
}
resp.sendRedirect(launchURL);
基本的に、'referrer' http パラメータには URL が含まれており、アプリケーションで [戻る] ボタンをクリックすると、ブラウザはその URL に戻ります。パラメータとして URL に追加されます。少し調査した結果、リファラー URL をサニタイズする必要があることがわかりました。もう少し調査した後、この種の機能を提供しているように見えるesapiプロジェクトを見つけました。
//1st canonicalize
import org.owasp.esapi.Encoder;
import org.owasp.esapi.Validator;
import org.owasp.esapi.reference.DefaultEncoder;
import org.owasp.esapi.reference.DefaultValidator;
[...]
Encoder encoder = new DefaultEncoder(new ArrayList<String>());
String cReferrer = encoder.canonicalize(referrer);
ただし、リファラー URL に属さない jscript コードやその他のものなどを検出する方法がわかりませんでした。では、どうすればesapiでそれを達成できますか?
私は試した:
Validator validator = new DefaultValidator(encoder);
validator.isValidInput("Redirect URL",referrer,"HTTPParameterValue",512,false);
ただし、これは機能しません。私が必要としているのは、次のような関数です。
http://www.google.com (わかりました)
http://www.google.com/login?dest=http://google.com/%0D%0ALocation : javascript:%0D%0A%0D%0Aalert(document.cookie) (問題あり)
それとも、次のステートメントを呼び出すだけで十分ですか?
encoder.encodeForHTMLAttribute(referrer);
どんな助けでも感謝します。