5

私はWMDエディターの入力を無害化する方法を見つけようとしています。

<code>具体的には、WMDが生成するタグでのみHTMLタグを使用できるようにしようとしています。それは可能ですか

私の問題は、次のコードが潜在的なXSS攻撃に対して脆弱なHTMLとしてレンダリングされることです。

例えば、<a onmouseover="alert(1)" href="#">read this!</a>

上記のコードは通常、プレビューモードとデータベースに保存されたときの両方でレンダリングされます。

スタックオーバーフローにはこの問題はないようです。同じコードがテキストとしてレンダリングされるだけです。

StackOverflowチームがhttp://refactormycode.com/codes/333-sanitize-htmlでコードを共有していることに気付きました。これを行うためにWMDをサニタイズするために本当にC#を使用する必要がありますか?

4

2 に答える 2

3

私はこれにHTMLPurifierを使用することになりました。

于 2010-05-08T14:24:13.277 に答える
1

クライアント側で WMD からの不正なスクリプトをブロックしたい場合は、こちらの回答をご覧ください: WMD エディターのプレビュー HTML をサーバー側の HTML 検証に合わせます (たとえば、埋め込まれた JavaScript コードはありません)

WMD エディターでクライアント側のホワイトリストを実装して、WMD のプレビュー ウィンドウの HTML を既知の安全な HTML 要素と既知の安全な HTML 属性に制限する方法を示します。WMD が HTML を生成した後に検証を行うため、WMD エディタの HTML 生成にバグがあり、不正なスクリプトが通過する可能性がある場合でも、ホワイトリスト ブロッカーがそれをキャッチします。このコードは、StackOverflow.com の同じ検証の実装に基づいています。

とはいえ、サーバー側の検証も必要です (PHP を使用している場合は、HTML Purifierが適切な選択です)。クライアントを修正しても、攻撃者がブラウザーをシミュレートして悪意のあるマークダウンを保存することを防ぐことはできないからです。サーバーに POST することによって。そのため、攻撃者が侵害されたマークダウンをサーバーに取得し、サイトのモデレーターにページを編集するよう説得するというあいまいなケースを防御することを除いて、クライアント側の WMD プレビューア検証を行うことは実際には必要ありません。その場合、クライアントの WMD プレビューアの検証により、攻撃者がサイト全体を乗っ取るのを防ぐことができます。

また、クライアント側で検証を行うと、クライアントで許可されているのと同じタグと HTML がサーバーでも許可されることがわかるため、役に立ちます。サーバー側のホワイトリストをクライアントのホワイトリストと同期してください。例が必要な場合は、 StackOverflow のホワイトリストがここにあります。

于 2010-05-15T03:10:26.503 に答える