.NET用HTMLサニタイザー
-
19-08-2019 - |
質問
私は、asp.net mvcを使用して一般公開されるプロジェクトを開始しています。約10億のphp、python、およびrubyのHTMLサニタイザーが存在することを知っていますが、.netで何か良いものへのポインタを持っている人はいますか?そこにあるものであなたの経験は何ですか? stackoverflowはasp.netで行われ、フリーフォームHTMLを許可するサイトであることを知っています。それは何を使用しますか?
他のヒント
HtmlSanitizer
出典: https://github.com/mganss/HtmlSanitizer
かなり堅牢な消毒剤。インラインスタイルを理解してクリーンアップできますが、<!> lt; style <!> gt;を処理できるパーサーはありません。ブロックなので、それらを取り除きます。確かに、MicrosoftのAntiXSSが放棄される前のレベルまで、そしておそらくそれを超えています。
あなたの質問に基づいて、私は次の提案をしています:
- 自由形式のHTMLを許可するため、許可されるタグ、属性、CSSクラスのセットを指定できるソリューションが必要です。
- 自由形式のHTMLを許可すると、ユーザーがエラー(意図的かどうか)を行うため、不正なHTMLにも対処する必要があります。したがって、 Html Agility Pack などのトレラントパーサー上に構築されたソリューションが必要です。
- ブラックリストサニタイザーは新しいHTML仕様からあなたを保護しないため、ホワイトリストのアプローチを採用する必要があります。さらに、HTML仕様のサイズのために、ブラックリストがすべてのケースを最初からカバーすることを保証するのは非常に困難です。
同じ問題に直面し、Html Agility Packの上にホワイトリストルールベースのHTMLサニタイザーであるHtmlRuleSanitizerを作成しました。
ac#バージョンはこちら
こちらはマイクロソフトが作成したものです。 http://wpl.codeplex.com/
var cleanHtml = Sanitizer.GetSafeHtml(unsafeHtml);
使用することもできます
AntiXss.GetSafeHtmlFragments
HTMLフラグメントを解析して入力をサニタイズし、このサニタイザーをリッチコンテンツに使用して、有害なスクリプトをコンテンツに含まず、ブラウザーに安全に表示されるようにします。使用するテキスト入力(リッチコンテンツではない) AntiXss.HtmlEncodeまたは同等のその他のhtmlエンコーダー。リッチコンテンツのサンプルを次に示します。
string mal = "<IMG NAME = 'myPic' SRC = 'images / myPic.gif' onerror='alert(1)' onerror='alert(1) ><div bottommargin = 150 ondblclick = 'alert('double clicked!')' >< p > Double - click anywhere in the page.</p> </div> ";
var cleanHtml = Sanitizer.GetSafeHtmlFragment(mal);
Console.Write(cleanHtml);
Console.Read();
注:Nugetpackage ManagerからAntiXSSライブラリをダウンロードし、この名前空間を含めます ソースコード内のMicrosoft.Security.Application ;