2011-12-29 7 views
5

HTMLサニタイザに関する多くの質問がSOに表示されていますが、私が望むことをすればわかりません。いくつかの推奨されたアプローチは4歳以上であるため、混乱します。危険なマークアップをフィルタリングするが残念なことになるASP.NET MVCのHTMLサニタイザ

TinyMCEエディタのページがあります。もちろん、このエディタはHTMLをサーバに送信し、HTMLを期待しているので、の属性で修飾されたStringのプロパティを持つエンティティを作成しました。それはうまくいく。

ここで、<script>タグ、<img onerror="">、またはJSを実行する方法、または外部URLを指すCSSを送信することを誰も試みないようにしたいと思います。

現時点で最良の解決策は何ですか?

WPLにはHtmlSanitizationLibraryがありますが、どのタグが「安全」と考えられるかはどのようにわかりますか?

WPLは昨年4月から何もリリースしておらず、ベータ版でした。だから私はこのプロジェクトがアクティブであるかどうか疑問に思っていましたか?

乾杯。

+0

まだアクティブです。しかし、Sanitizerは、まあ、最近は衰えています。人々がXHTMLに移動するにつれて、サニタイザはその仕事に追いついておらず、リライトはテーブルにはありません。 TinyMCEは正しいXHTMLマークアップを生成するので、Linq2Xmlを使用してDOMを照会し、あなたの心のコンテンツをサニタイズすることができます。これはおそらく長期的な解決策です(そして、うーん、ブログや2つのアイデアを教えてくれます) – blowdart

答えて

2

WPLが事実上の基準です。それを介して文字列を実行すると、あなたはそれがエンコードされていない印刷しても安全です:

@Html.Raw(Model.SomePropertyThatWasSanitizedWithWPL) 
+0

はい、私はすでにHtml.Rawメソッドを使用しています。しかし、私の質問は、どのタグ/属性がストライプされているかです。 – vtortola

+0

@vtortola、 '

2

AntiXss/WPLは現在、「エンド・オブ・ライフ」です。他の場所でa replyにこのライブラリが見つかりました:

HtmlSanitizer、XSS攻撃につながる可能性のある構造からHTMLフラグメントを消去する.NETライブラリ。

プロジェクトサイト:https://github.com/mganss/HtmlSanitizer

0

ヨは、おそらく実際にHTML文書を理解している消毒剤HTMLベースのホワイトリストのために行く必要があります。正規表現の使用は、一般的には安全なアプローチとはみなされません。

MicrosoftのAntiXssを使用しない理由は、タグの処理のような詳細なルールを適用することができないためです。これにより、たとえば、テキストコンテンツを保存する意味がある場合に、タグが完全に削除されます。さらに、それはもはや維持されていないようです。

var sanitizer = new HtmlSanitizer(); 
sanitizer.Tag("strong").RemoveEmpty(); 
sanitizer.Tag("b").Rename("strong").RemoveEmpty(); 
sanitizer.Tag("i").RemoveEmpty(); 
sanitizer.Tag("a").SetAttribute("target", "_blank") 
    .SetAttribute("rel", "nofollow") 
    .CheckAttribute("href", HtmlSanitizerCheckType.Url) 
    .RemoveEmpty(); 

string cleanHtml = sanitizer.Sanitize(dirtyHtml); 

事前に定義された衛生戦略を使用します。

HtmlRuleSanitizerあなたは正確に次のようにエディタによって生成されたHTMLが期待と一致するように、衛生戦略を定義することができます。

関連する問題