質問

私はの入力を消毒する方法を見つけようとしています WMD 編集者。

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

私の問題は、次のコードがhtmlとしてレンダリングされていることです。 XSS攻撃.

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

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

Stack Overflowにはこの問題がないようです。同じコードがテキストとしてレンダリングされます。

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

役に立ちましたか?

解決

最終的に使用しました HTML浄化器 このため。

他のヒント

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

WMDのプレビューペインHTMLを既知のセーフHTML要素と既知のセーフHTML属性に制限するために、WMDエディターにクライアント側のホワイトリストを実装する方法を示しています。検証を行います WMDはHTMLをgeneatしているため、WMDエディターのHTML生成にバグがある場合でも、悪いスクリプトを通過できるようにしても、ホワイトリストブロッカーがキャッチします。このコードは、Stackoverflow.comの同じ検証の実装に基づいています。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top