2012-02-08 17 views
0

私はXSS攻撃を防ぐためにユーザー入力をきれいにしたいと思っており、ユーザーはHTML/CSSを投稿する必要はないので、必ずしもHTMLホワイトリストを持っているとは限りません。Apache Commons StringEscapeUtilsとXSS防止のためのJSoup?

これ以外の選択肢に目を向けると、どちらが良いでしょうか? Apache Commons' StringEscapeUtilsまたはJSoup Cleaner

ありがとうございます!

更新:

私はそれとApache Commonsの両方のためのいくつかのユニットテストを書いた後JSoupと一緒に行きました。

私は、JSoupが一重引用符で囲まない(つまり、 "Alan's mom"は変更されず、Apache Commonsは "Alan \ 's mom"に変わります)のが好きです。

ホワイトリストはまったく問題ありませんでした。設定を必要とせず、HTMLタグの一部のサブセットを許可すると便利なオプションがいくつか組み込まれています。

+0

JSoupは素晴らしいものです。 – AHungerArtist

答えて

0

"Better"?私はそれが重要だとは思わない。 CleanerにはWhitelist.none()があり、エスケープユーティリティはすべてをエスケープします。

"クリーン"入力をレンダリングする方法によって異なります。テキストノードのみを使用するか、エスケープされたHTMLを表示しますか?

+0

私たちのアプリにHTMLを入力するべきではありません(コメントを残すだけです)ので、テキストノードかエスケープされたhtmlかは関係ありません。しかし、心配したくないことの1つは、テキストを再度表示する前にエスケープする必要があることです。 – Cuga

0

私は、Apache CommonsのescapeHtmlを2.6で使用したり、escapeHtml4を3+で使用している場合にスラッシュを追加しないため、Cugaのテストケースが大好きです。文字をHTMLエンティティに変換するだけです。これはドキュメントに明記されています。

は、私もこれをテストするために公共の例があります。

https://gist.github.com/croucha/2e2925264890886cbf4d

だから、私は間違っていることを証明してくださいそれ以外の場合はスラッシュを追加するエスケープについてのあなたの部分が間違っています。これらの安全でない文字を表示したいが、ブラウザ内での実行を避けたいのであれば、あなたの最善の選択肢はApacheコモンズです。私が知る限り、Jsoupは安全であっても内容を含む文字を完全に省略しています。

関連する問題