17

ユーザーが送信した HTML の厳密な (ホワイトリスト) 検証/フィルタリングを実行するためのベスト プラクティスを探しています。

主な目的は、Web フォーム経由で入力される可能性のある XSS や同様の厄介なものを除外することです。2 つ目の目的は、HTML ビューを持つ WYSIWYG エディターなど、技術者以外のユーザーが入力した HTML コンテンツの破損を制限することです。

HTML Purifierを使用するか、HTML DOM パーサーを使用して HTML(dirty)->DOM(dirty)->filter->DOM(clean)->HTML(clean) のようなプロセスを実行することで独自のものを作成することを検討しています。

これらの戦略、または効果的でもあるより簡単な戦略での成功について説明できますか? 注意すべき落とし穴はありますか?

4

4 に答える 4

9

HTML Purifier で知っているすべてのエクスプロイトをテストしましたが、非常にうまく機能しました。HTML だけでなく、CSS や URL もフィルタリングします。

要素と属性を無害なものに絞り込むと、落とし穴は属性の内容、つまりjavascript:疑似 URL (IE ではプロトコル名にタブ文字を使用できますが、java	script:まだ機能します) と JS をトリガーする CSS プロパティにあります。

URL の解析は難しい場合があります。たとえば、これらは有効です:http://spoof.com:xxx@evil.comまたは//evil.com. 国際化ドメイン (IDN) は、Unicode と punycode の 2 つの方法で記述できます。

HTML Purifierを使用してください。これらのほとんどが解決されています。壊れた HTML を修正したいだけなら、HTML Tidy を使用してください (PHP 拡張として利用できます)。

于 2008-10-13T21:39:12.040 に答える
5

ユーザーが送信した HTML は常に有効であるとは限らず、完全であるとは限りません。ブラウザーはさまざまな無効な HTML を解釈するため、それを確実にキャッチできるようにする必要があります。

また、有効に見えることに注意してください。

<img src="http://www.mysite.com/logout" />

<a href="javascript:alert('xss hole');">click</a>
于 2008-10-13T21:19:54.060 に答える
1

HTML Purifier を使用して成功しましたが、xss やその他の不要な入力フィルターは通過していません。また、Tidy 拡張機能を使用してサニタイズ HTML を実行し、それが検証されることも確認します。

于 2008-10-13T22:08:31.310 に答える
-1

W3C には、HTML を検証するための大きなオープンソース パッケージがあり、ここから入手できます。

http://validator.w3.org/

自分でパッケージをダウンロードして、おそらく彼らがしていることを何でも実装できます。残念ながら、多くの DOM パーサーは、いわば「野生の」HTML コードを割り当てるためにルールを曲げることを厭わないようです。より実用的なツールです。HTML に完全に準拠しているわけではありませんが、私たちが毎日使用している Web サイトはたくさんあります。

于 2008-10-13T21:35:25.293 に答える