2011-12-23 11 views
0

私はしばらくの間MS's AntiXSS libraryを使ってきました。最近私は自分のサイトのテキストエリアをプレーヤテキストエリア(WYSIWYGであった)に変更し、改行をbrに変換することにしました。C#では、brのを含むHTML入力を許可しながらXSSを防ぐ方法は?

問題は、MSのAntiXSSライブラリはこれをサポートしていません...それはbrを取り除きます。私はユーザーのエントリをチェックしないで直接私のDBに入れさせたくありません。 MS AntiXSSライブラリを使用しないと、br(C#)などのHTML入力を許可しながらXSSを防止する信頼できる方法は何ですか?

+1

Htmlでテキストをエンコードし、新しい行を
に置き換えてデータベースに保存します。このフィールドのXSSチェックを無効にします。あなたはHtmlでそれをエンコードして、安全です。 (もし私がどこにいたら、私は生のままでレンダリング中にエンコードします) – Guillaume

+0

Guillaumeのアイデアをありがとう...私はASP.NET MVC 3(かみそり)を使用していますが、それを元に戻す方法を理解することはできませんビューのHTMLに変換します。エンコードされていない状態で保存すると、基本的にハッカーのコードが保存されます。 HTMLをレンダリングしてもらいたいが、安全のままにしておきたい。嬉しい考えですか? :) – Chaddeus

答えて

0

これを解決するために、生のHTMLをそのまま保存し、保存する前にEnvironment.Newlines<br />に置き換えて保存することにしました。

次に、私はMS AntiXSSコードを使用して訪問者に表示します。理想的なやり方は100%ではありませんが、それをやりたいのです。

すべてのリクエストでAntiXSSが実行されていないことを確認するために、ここでキャッシングを少し行います。

+0

これは、挿入された '
'の代わりにAntiXSSが使用されるため、動作しません。 –

+0

しかし、それは '
'を '
'に置き換えますが、それは私の必要性のためにはまだ動作します(ただし '
'を出力したいと思います)。 – Chaddeus

0

AntiXSSの出力をコピーすることはできますか?その場合は、AntiXSSを使用して入力を実行し、置換後に
置換えを行い、データを自分で保存してください。

+0

Sry、現時点ではそれがありません。 1つの問題は、AntiXSSの出力がすべての改行を削除するという事実に起因します。したがって、簡単な.replaceは効果的ではありません。 – Chaddeus

1

このフィールドでAntiXSSを無効にし、ユーザの入力をデータベースに直接格納することができます。 このようにして、このテキストをHTMLだけでなくあらゆる出力でレンダリングすることができます。

さて、あなたはASP MVCかみそりを使用してHTMLページにこのテキストを表示したい場合、あなたはこのようなものを使用することができます

@Html.Encode(Model.MyMultilineTextField).Replace(@"\n", "<br />") 

をHTMLタグが解釈されないようにHtml.Encodeがテキストをエンコードし、 XSSは不可能です。 あなたのための変換(whith置き換え)を行う拡張メソッドをHtmlに追加することができます。 \ rも扱えるかもしれません。

+0

'@Html.Encode()'を使用すると、 '<b>'のような出力が生成され、ビューにHTMLはレンダリングされません。 – Chaddeus

+0

@ChadだからこそGuillaumeがテキストをエスケープした後の改行*を置き換えたのです。 –

関連する問題