2012-06-23 23 views

答えて

2

このアプローチはStackExchangeと同じではありませんが、私は簡単な方法でAntiXSS 4.xライブラリに「安全な」HTMLを許可する入力をサニタイズすることができました。

http://www.microsoft.com/en-us/download/details.aspx?id=28589ここでバージョンをダウンロードできますが、便利なDOCXファイルにリンクしています。私の推奨する方法は、NuGetパッケージマネージャを使用して最新のAntiXSSパッケージを入手することです。

4.x AntiXssライブラリにあるHtmlSanitizationLibraryアセンブリを使用できます。 GetSafeHtml()は、Microsoft.Security.Application.SanitizerのHtmlSanitizationLibraryにあります。

content = Sanitizer.GetSafeHtml(userInput); 

これは、データベースに保存する前に行うことができます。利点は、すぐに悪質なコンテンツを削除し、出力するときにそれを心配する必要がないことです。欠点は、既存のデータベースコンテンツを処理しないため、データベースの更新を行うたびにこれを適用する必要があることです。

代わりに、コンテンツを出力するたびにこのメソッドを使用する方法があります。

私は好みのアプローチが何であるか聞いてみたいと思います。

+1

私はこれがWYSIWYG入力をクリーンアップするにはあまりにも積極的であることがわかりました。リンクはただちにに切り捨てられます。 –

+1

修正 - AntiXssでエンコードしたくありません。ただし、AntiXssライブラリにはSanitizationライブラリが含まれています。しかし、バージョン4.2は「すべて破った」ようです。 StackOverflowのこのリンクは、多くの便利なものにリンクしています:http://stackoverflow.com/questions/3959136/antixss-htmlencode-vs-antixss-getsafehtmlフラグメントホワイトリストを使用するこの回避策を含めて(あなた自身でカスタマイズすることもできます)サニタイズする:http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/ –

0

JSoupパーサを試すことができます。これは、HTML入力をサニタイズすると同時に、多くの機能を提供します。 JSoupの詳細についてはhttp://jsoup.org/にアクセスし、そこからバイナリをダウンロードすることができます。 これは、HTMLツリーをたどって目的の要素を取得するDOMメソッドを提供します。

XSS攻撃を防ぐためにHTMLで生成されたコードをサニタイズするのは良い方法ですが、HTML入力をサニタイズすることでXSSアタッチを避けるためにパーサーを使用しないことを強く推奨します。 あなたのHTMLツリーが非常に大きい場合、応答時間はマニフォールドを増加させるでしょう。あなたのHTMLツリーのサニタイズに必要なのは、FORMに入力しているユーザが適切であり、期待値通りであることを確認する必要があります。

www.owasp.orgにアクセスして、XSS攻撃を回避する方法を詳しく知ることができます。このサイトでは、HTMLツリーにXSS攻撃がないようにチートシートを提供しています。

0

ASP.NET HttpUtility.Htmlencode()がそれを実現します。 危険なスクリプトをブロックしたい場合は、まずをデータベースに挿入しないでください。まず、データベースに挿入する前にHTMLテキストを消去します。

私はあなたのためにそれを行うクラスを見つけました:http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/

それが正常に動作し、消毒のカスタムホワイトリストに新しいタグや属性を追加することができます。

注:Microsoft SanitizerおよびAnti-XSSライブラリは、私にとっては役に立ちませんでした。あなたも試してみてください。

関連する問題