2

ユーザーから提供されたhtmlをページに表示したい。私のページはほぼ完全に動的 (JS コード) であり、サニタイズする簡単な方法があるかどうか疑問に思っていました。

同様に、すべての<script>and<iframe>タグを削除し、文字列に含まれるすべてのイベントのバインドを解除する (または「on」で始まる html 属性を削除する) ことで、文字列から JavaScript コードが実行されないようにすることができますか?

ユーザーは、スタイル属性に css 'content' プロパティを持つ JavaScript を挿入できますか?

HTML マークアップや CSS スタイルを保持したいので、 jquery$(...).text(...)関数は役に立ちません。

簡単な解決策がない場合は、html タグのホワイトリスト ( table span div img a b u i strong...) を使用する準備ができていますが、属性もホワイトリストに登録する必要はありません。

4

1 に答える 1

4

ユーザーコンテンツを安全に表示するためのより確実な方法は、ホストWebページとは異なるドメインを起源とするiframeにコンテンツを埋め込むことです。これはjsFiddleが行うことです。メインページはjsfiddle.netから提供されますが、ユーザースクリプトはfiddle.jshell.netから提供されます。これにより、ユーザーコンテンツは通常どおりに機能しますが、ブラウザーのクロスオリジン保護により、ユーザーコンテンツがホストページ、ドメイン、Cookieなどに干渉することはありません。

スクリプトがコンテンツに含まれる可能性のあるすべての場所を削除しようとすることは危険な提案であり、おそらく永遠に新しい攻撃ベクトルを追いかけることになります。個人的には、ブラウザをそのビジネスに任せて、ユーザーコンテンツを別のドメインに配置したいと思います。さらに、ユーザーコンテンツに通常のJSを使用できるようにすると、希望どおりに機能するようになります。

于 2012-12-15T18:20:40.680 に答える