11

ASP.NET プロジェクトで使用する優れた HTML サニタイザーを探しています。問題は、サニタイザーがスタイル属性をサポートする必要があることです。スタイル属性には CSS プロパティが含まれる場合があり、これもサニタイズする必要があります。これまでのところ、私は使用するのに適した製品を見つけることができませんでした. 弾丸をかじって独自のサニタイザーを作成する前に、まずここの人々が何を使用しているかを調べてみようと思いました.

私が見て拒否したライブラリ:

  • AntiXSS ライブラリ (古いバージョンは安全ではなく、新しいバージョンではスタイル タグが削除されます)
  • AntiSamy .NET (保守されていない、.NET バージョンに必要な機能がない、古い依存関係がある)
  • AjaxControlToolkit の HTMLAgilityPackSanitizer (スタイル タグをエスケープ)

理想は、既知の値または正規表現のリストに対してプロパティ値を検証するホワイトリスト ベースのサニタイザーを用意することです。

誰でも私を正しい方向に向けることができますか?

4

5 に答える 5

3

HTML を操作するためのツールとして、 CsQuery (私が主な作成者です) を見てください。

これは .NET jQuery ポートであり、クライアントで使用するのと同じメソッド (DOM および jQuery の API) を介して HTML への完全なアクセスを提供します。これにより、独自の消毒剤を簡単にロールアウトできます。

Rick Strahl は最近、HTML のサニタイズに関するブログ投稿を行いました。彼は、HTML Agility Pack を使用してルールでそれを行う方法を示しました。CsQuery を使用して同じことをより簡単に実現する方法を示すコメントをそこに投稿しました。tags の列挙を考えると、基本はこれだけですBlackList:

CQ doc = CQ.Create(html);

// creates a grouped selector "iframe,form,script, ..."
string selector = String.Join(",",BlackList); 

// CsQuery uses the property indexer as a default method, it's identical 
// to the "Select" method and functions like $(...)

doc[selector].Remove();

一部のタグのコンテンツを実際に削除したくない場合 (たとえば、禁止したい書式設定タグなど) は、代わりに jQuery のアンラップを使用できます。これには、タグを削除する効果がありますが、その子は保持されます。

doc[selector].UnWrap();

完了したら:

string cleanHtml = doc.Render();

JavaScript のイベント属性のクリーンアップなどについては、Ricks の投稿に詳細がありますが、基本的に CsQuery は、HTML を操作するための使い慣れた簡単な方法を備えたツールボックスです。必要な方法で機能するサニタイザーを簡単に作成できるはずです。

CsQuery の DOM モデルには、特定の名前付きスタイルを削除する必要がある場合に、スタイルに直接アクセスするためのメソッドも含まれています (たとえば、単に文字列を操作するよりも便利な方法で)。たとえば、すべての要素から「font-weight」スタイルを削除できます。

// use the [attribute] selector to target only elements with styles

foreach (IDomObject element in doc["[style]"]) {
    if (element.HasStyle("font-weight")) {
        element.RemoveStyle("font-weight");
    }
}

現在の CsQuery の主な欠点はドキュメントです。その API は、ブラウザの DOM と jQuery に可能な限り一致するように設計されており (jQuery と C# の言語の違いを考慮して)、公開 API には十分なコメントが付けられているため、使い始めるとコードを簡単に変更できるはずです。

ただし、CsQuery に固有の非標準メソッド ("HasStyle" や "RemoveStyle" など) がいくつかあります。ただし、基本的な使用法は github の readme で十分にカバーされています。Nuget にもありCsQueryます。

于 2012-08-16T15:36:39.197 に答える
0

オープン ラボのブログ ( http://roberto.open-lab.com/2010/03/04/a-html-sanitizer-for-c/ ) に投稿された HtmlSanitizer を参照してください。これはスタイル タグをサポートしており、html エディターで使用するのに非常に適しています。

于 2012-08-17T12:31:13.427 に答える
0

Tatham Oddie ASP.Net MVP - http://blog.tatham.oddie.com.au/2009/06/15/released-xhtml-markup-sanitizer/

私は今これを何人かの人々に言及しました。やりたいことがすべてできるわけではないかもしれませんが、Tatham は素晴らしいコーダーなので、たくさんのアイデアが得られるはずです...

AntiXSS だけで、新しいバージョンは HTMLAgilityPackSanitizer にあります。

于 2012-08-16T03:05:02.257 に答える