[解決済み] サーブレットフィルタでリクエストパラメータを変更する
質問
既存の Web アプリケーションが Tomcat 4.1 上で動作しています。 あるページにXSSの問題がありますが、ソースを修正することができません。 私は、ページによって見られる前にパラメータをサニタイズするために、サーブレットフィルタを書くことにしました。
このようなFilterクラスを書きたいと思います。
import java.io.*;
import javax.servlet.*;
public final class XssFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
String badValue = request.getParameter("dangerousParamName");
String goodValue = sanitize(badValue);
request.setParameter("dangerousParamName", goodValue);
chain.doFilter(request, response);
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
}
}
しかし
ServletRequest.setParameter
は存在しない。
リクエストをチェーンに渡す前に、リクエストパラメータの値を変更するにはどうすればよいですか。
どのように解決するのですか?
ご指摘の通り
HttpServletRequest
には setParameter メソッドがありません。これは意図的なもので、クラスはクライアントから来たリクエストを表し、パラメータを修正するとそれを表すことができないからです。
一つの解決策は
HttpServletRequestWrapper
クラスを使うことです。これは、あるリクエストを別のリクエストでラップすることを可能にします。これをサブクラス化して
getParameter
メソッドをオーバーライドして、サニタイズされた値を返します。そして、そのラップされたリクエストを
chain.doFilter
に渡すことができます。
少し醜いですが、サーブレット API がそうするように言っているのです。 もしあなたが他の何かを
doFilter
に他のものを渡そうとすると、いくつかのサーブレットコンテナは仕様に違反していると文句を言い、その処理を拒否するでしょう。
パラメータを処理するオリジナルのサーブレット/JSPを修正し、リクエストに
属性が必要です。
を期待するようにします。フィルタはパラメータを調べ、それをサニタイズし、属性を設定します (これは
request.setAttribute
を使って)サニタイズされた値で属性を設定します。サブクラス化もスプーフィングもありませんが、アプリケーションの他の部分を変更する必要があります。
関連
-
型に解決できない エラー解決
-
Javaでよくある構文エラー
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
無効な文字定数
-
FindBugの使用概要
-
Zipファイルの圧縮・解凍にantを使用する
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
-
[解決済み] Javaでサーブレットフィルタを使用して、受信したサーブレットリクエストのURLを変更するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
Uncaught ReferenceError: は定義されていません。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
Javaジェネリックを1つの記事で
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
linux ant Resolve error: main class not found or couldn't be loaded org.apache.tools.ant.launcher.