1

私は、管理者がWSYWIGエディタを使用して任意のHTMLでサイトの1ページのセクションを編集できるサイトを持っています。この任意のHTMLを他のユーザーに安全に提供する方法。任意のユーザーがアップロードしたコンテンツを安全にレンダリングする(WSYWIGエディタから)

基本的な目的は、XSSエラー(つまり、ユーザーが自分のCookieを盗まれるなど)の可能性を排除することです。
iframe、frame、embed、style、video、objectなど、ユーザーが入力できるようにすることは安全ではないことがわかりました。

しかし、iFramesやスタイルタグを除外することはできません管理者がYouTube動画をアップロードしてテキストをスタイルできる必要があるためです。

また、コンテンツ管理システムでは、ユーザーがアップロードしたコンテンツが別のドメイン(例:content.mysite.com)から配信されることもあると聞いています。私のサイトのクッキー(例えば、app.mysite.com)は、同じ発信元ポリシーのために盗みます。

私のサイトはCMSではないので、これは私にとって過酷な解決策のようです。
任意のカスタマイズを可能にする1ページの1つの部分(管理者だけが編集可能)があります。

だから、これについて行く方法はありますか?
iframeに任意のコンテンツを埋め込むと、ユーザーは安全に保たれますか?

ありがとうございます!

また、私が使用しているフレームワークはRuby on Railsです。

+0

WSYWIGエディタとは何ですか? – 1615903

答えて

0

クライアント上のhtmlエディタは、XSSから保護するのは簡単ではありません。あなたが言うように、そのようなコンテンツを別のドメインから提供することはリスクを軽減するかもしれませんが、例えば他のドメインのユーザーを認証してどのようにユーザーのコンテンツをダウンロードしないようにするかなど、

また、タグと属性のホワイトリスト検証は、通常実行できません。これらのタグのタグと属性のホワイトリストを持つことができ、他のものはhtmlコードから削除することができます。この問題は、htmlエディタがstyle属性を使用する可能性が高く、少なくとも古いブラウザではスタイルがXSSに対して脆弱であることが考えられます。エディタは通常、リンク(<a href="">)を保存できる必要があり、XSSに対しても脆弱です(例:<a href="javascript: alert(1)">)。

あなたが取ることができるアプローチは実際にはGoogle Cajaです。 HTML、Javascript、CSSからすべてのJavascriptを削除することができ、あなたのページに含めても安全です。また、Javascriptで記述されたクライアント側のサニタイザも使用でき、十分な保護を提供することができます。もう1つのクライアント側サニタイザはDOMPurifyです。最高のCajaもサーバー側のソリューションですが、それはインストールと保守をいくらか難しくしています。クライアントサイド部分とDOMPurifyは、すべてクライアント上にあるので、少し安全性が低くなりますが、多くの状況で適切な保護を提供することは可能です。 (DOMPurifyは古いブラウザでは機能しませんが、CSSコードをサニタイズしません。これは最新のブラウザではOKです)

これらのクライアント側のソリューションでは、注入されたJavascriptを使用してHTMLを保存することができます。ユーザー(攻撃者)が十分にスマートであるが、HTMLコンテンツを表示する場合は、XSSの脆弱性のない方法でクライアントに送信します(たとえば、テキスト/ javascriptコンテンツタイプのAJAX応答など)。ページのDOMに挿入する前にブラウザのクライアントサイドのサニタイザで実行します(エディタコントロール自体に渡します)。

エディタで右フックが許可されている場合は、プレビュー機能に切り替えてプレビューに切り替える前に入力したHTMLをサニタイズすることもできます。これは重要なことですが、間違いなくリスクは小さいですが、ユーザーがJavascriptをエディタに挿入してプレビューで実行しても、サーバーに送信することはできません。これはDOM XSSと呼ばれ、クライアントでサニタイズを実行する必要がある理由の1つです。

関連する問題