私は、JavaベースのWebアプリケーションでクロスサイトスクリプティング(XSS)を防止するために取り組んでいます。私はすでに、この例のようなサーブレットフィルタを実装しています。http://greatwebguy.com/programming/java/simple-cross-site-scripting-xss-servlet-filter/は、アプリケーションへのすべての入力をサニタイズします。特別なセキュリティ対策として、すべてのJSPでアプリケーションのすべての出力をサニタイズしたいと思います。私はこれがどのように行われ、2つの相補的な選択肢が見つかったかを調べるためにいくつかの研究を行った。XSSを防ぐためにc:outを使用する代わりに
これらのうちの1つは、SpringのdefaultHtmlEscape
属性の使用です。これは実装が非常に簡単で(web.xmlのいくつかの行)、出力がバネのタグ(つまり、メッセージタグまたはフォームタグ)のいずれかを通過するときに効果的です。私が発見した他のオプションは、しかし、原因私は(200個の+ JSPファイル)働いているアプリケーションのサイズに、直接ではなく${...}
などのEL式を使用し、代わりに第二のアプローチは、完全に動作することを<c:out value="${...}" />
を使用することです。 EL表現の不適切な使用をすべてc:out
タグで置き換えることは非常に面倒な作業です。また、将来すべての開発者がc:out
タグを使用するというこのコンベンションに固執することは、面倒な作業になるでしょう(コードはどれほど読めないのでしょうか)。
コードの変更が少なくて済むEL式の出力をエスケープする方法はありますか?
HTMLをエスケープするために 'fn:escapeXml'を使用しないでください。'''を生成しますが、これは標準HTMLエンティティではありません。 –
@Roland:いいえ、そうではありません。 '''を生成します。これはHTMLとXMLの両方で有効です( 'c:out'と同様)。 – BalusC
ああ、それは素晴らしいです。だから私は他の 'escapeXml'関数と混同しているに違いない。確かに、私はJSTL仕様でそれを調べました。これは明示的に言及されています。 –