ページに追加したい html (この場合は TinyMCE で作成) があります。ただし、セキュリティ上の理由から、ユーザーが入力したすべてを印刷したくありません。
HTMLの安全なサブセットのみをレンダリングできるようにするテンプレートタグ(できればフィルター)を知っている人はいますか?
マークダウンなどがこれを行うことを認識しています。ただし、マークダウンを認識しないリッチ テキスト エディターを使用しているため、ユーザーが混乱する可能性がある追加のマークアップ構文も追加されます。
ページに追加したい html (この場合は TinyMCE で作成) があります。ただし、セキュリティ上の理由から、ユーザーが入力したすべてを印刷したくありません。
HTMLの安全なサブセットのみをレンダリングできるようにするテンプレートタグ(できればフィルター)を知っている人はいますか?
マークダウンなどがこれを行うことを認識しています。ただし、マークダウンを認識しないリッチ テキスト エディターを使用しているため、ユーザーが混乱する可能性がある追加のマークアップ構文も追加されます。
removetagsがありますが、これは Django が期待する適切な形式のタグとまったく同じように見えない場合にタグを削除できないブラックリストのアプローチです。もちろん、属性を削除しようとしないため、他の 1,000 の方法に対して完全に脆弱です。<script>
タグを含まないスクリプトインジェクションの。これは罠であり、実際には本当のセキュリティをまったく提供しない一方で、安全であるという錯覚を提供します。
正規表現のハッキングに基づく HTML サニタイズ アプローチは、ほぼ必然的に完全に失敗します。実際の HTML パーサーを使用して、送信されたコンテンツのオブジェクト モデルを取得し、フィルタリングして既知の適切な形式で再シリアル化することが、一般的に最も信頼できる方法です。
リッチ テキスト エディターが XHTML を出力する場合は簡単です。minidom または etree を使用してドキュメントを解析し、それを調べて、既知の適切な要素と属性以外をすべて削除し、最後に安全な XML に変換します。一方、HTML を出力する場合、またはユーザーが生の HTML を入力できるようにする場合は、BeautifulSoup のようなものを使用する必要があるかもしれません。議論については、この質問を参照してください。
HTML のフィルタリングは大きくて複雑なトピックであるため、多くの人が制限付きマークアップ付きのテキスト言語を好むのはそのためです。
HTML Purifier、html5lib、または HTML サニタイズを行うために構築された別のライブラリを使用します。
removetags
削除するタグのリストを指定するために使用できます。
{{ data|removetags:"script" }}