2017-03-10 8 views
3

私は、任意のHTMLを許可するCKEditorのようなエディタをユーザが使用できるWebアプリケーションでXSS/JavaScriptインジェクションの脆弱性を削除したいと思います(エディタの特定の選択肢が任意のHTMLを許可するかどうか、とにかく任意のHTMLを送信する)。 SCRIPTタグ、ONCLICK、家族、または他のものであれ、JavaScriptはありません。ターゲットプラットフォームはPythonとDjangoです。Django/PythonでWYSIWYGに入力されたHTMLの安全性をどのように確保できますか?

ここで私の最高のオプションは何ですか?私は、タグと属性をホワイトリストに入れる実装を公開しています。つまり、ユーザーがHTMLで構築できるすべてのものを提出できるようにするために必要なものは表示されませんが、のみ JavaScriptが削除されます。かなり豊かなリッチテキストを可能にする、サポートされているタグの可用性を持つリッチテキストを用意して嬉しいです。また、Markdownを作成するエディタにも公開し、データが保存される前にすべてのHTMLタグを削除します。

また、サブミッションがテストに失敗したという例外がスローされた場合には、サニタイズされたテキストを生成する必要はないと考えています(HTML操作はもっと簡単ですが、Markdown実装のソリューションも考えています)。 (Ergo、文字列を小文字にして、 '<スクリプト'、 'onclick'などで検索すると十分かもしれません)

おそらく私の選択肢は解決策で、もし私が選択すれば、タグのホワイトリストになりますおよび属性名。

そこにある最善の解決策はありますか?

+1

[bleach](https://pypi.python.org/pypi/bleach)のようなものをチェックしましたか?それはまさにあなたが描いているものです。それはを通していくつかのタグを可能にし、私はあなたが[このよう]カスタムフィルタを作成することができると思います '< >' – user2896976

+0

で悪質なものを置き換える(http://stackoverflow.com/a/41434870/6396981)... –

答えて

1

HTMLを生成するWYSIWYGエディタを使用することを選択した場合は、サーバー上でbleachを使用してHTMLをサニタイズする(ホワイトリストを使用して)おそらく十分です。

マークダウン(または他のHTML以外のマークアップ)エディタを使用することを選択した場合、マークダウンソースを保存し、サーバー側でhtml(生成後!)を生成してサニタイズします。これにより、htmlがレンダリング後に消されるので、(インラインhtmlなどで)マークダウンをそのままにすることができます。しかし、クライアント側のエディタがプレビューをサポートしている場合は、markdownがサーバからロードされているときに、ブラウザレンダリングに関して非常に注意する必要があります。ほとんどのマークダウンエディタには、この目的のためのクライアント側の消毒剤が含まれています。

関連する問題