2009-03-22 10 views
1

私たちはSpring MVCを使用しているJ2EE Webアプリケーションを持っています。私たちは、ユーザー入力から特定の事前定義された文字を削除する必要があるWebアプリケーションの新しい要件を持っています。たとえば、アプリケーションがすべてのユーザー入力から '<'を削除するとします。J2EE Webアプリケーションのユーザー入力から事前定義された文字を削除するにはどうすればよいですか?

  1. JSPレベル:ユーザー入力を可能にし、クライアント側の処理によって文字を削除一人ひとりのjspを識別し、私はこの要件を満たすために2つのアプローチが出ています。

  2. サーブレットフィルタ:フィルタを使用してリクエストオブジェクトを代行受信します。ここでは、次の2つのアプローチのうちの1つを使用できます。

    2.1:request.getParameterメソッドをオーバーライドし、その内部に文字削除ロジックを記述します。このメソッドが呼び出されるたびに、フィルタリングされた結果が返されます。

    2.2:フィルタレベルで、パラメータマップをスキャンし、必要な文字をフィルタします。次に、setParameterメソッドを記述し、新しい値をリクエストパラメータマップに設定します。

どのアプローチをお勧めしますか?フィルタはパフォーマンスに影響しますか?あなたがより良いアプローチを考えることができるなら、私に知らせてください。

+0

セキュリティの観点からこれをやっていますか? –

答えて

2

ご希望の場合はクライアント側のフィルタリングを行うことができますが、には絶対に頼るべきではありません。クライアントはJavaScriptをオフにすることができます。彼らはそれがそれに来るときに好きなものを投稿することもできます。クライアント側の検証は便利です。これはサーバー側の検証に代わるものではありません。

サーブレットフィルタを使用する場合、私はそれを大切にしているかどうかはわかりません。怠惰な、忘れやすい、あるいはまったく無頓着な開発者からあなたを守ろうとしているような(そして私は間違っているかもしれない)ようです。

また、(このサイトのように)任意の時点でHTMLを許可すると、そのようなことを普遍的なルールとして指定することはできません。このようなことは、他のすべての検証を行う場所で処理する必要があります。あなたが本当にそれについて心配している場合は、その周りに単体テストを入れてください。

サーブレットフィルタは重いと思われるかもしれません。

あなたはSpring MVCを使用しています。 Springのバリデータの背後にある特定の検証フレームワークを使用していますか?どのような場合でも、IMHOはこの種の問題に対処し、簡単にユニットテスト可能な[sic]を扱う正しい場所です。

私はこれが正しいことだと思います。

あなたは本当にそのアプローチに傾いている場合は、サーブレットフィルタのsetParameterでこれを行うことができなかった技術的な理由は何も表示されません。サーブレットリクエストでsetParameterをオーバーライドすることで、それを確実に行います。それはできますか?たとえあなたができても私はしません。

+0

私たちはSpring MVCフレームワークを使用しています。私は質問にもそれを加えました。感謝します。 –

0

これは正規表現を使用することをお勧めします。

どこに置くかは、ビジネスロジックのように聞こえるので、サーブレットフィルタやJSPレベルは非常に良いアイデアとしては聞こえません。

はい、パフォーマンスが低下しますが、目立つことも重要ではありません。

1

私は顔についての問題を回したいと思います。ユーザーがフィールドに<のような文字を入力しているという問題、またはWebページで再度印刷するときにエスケープしていないという問題はありますか?

+0

ユーザーは文字を入力することができます。クライアントはDBにそれらを保存したくありません。そのような文字を入力しないようにユーザーに知らせるためのアラートやメッセージを表示する必要もありません。 –

0

私は、サーブレットフィルタを使用してここに役立つかもしれない別のStackOverflowの記事を読んでいた:あなたはあなたのニーズに合わせてデータをサニタイズするのに十分な汎用的なものを作ることができれば

Modify Request Parameter with Servlet Filter

は、サーブレットフィルタを使用するのが妥当と思われます。

関連する問題