送信されたフォームからすべてのhtml /スクリプトを確実に削除するために使用できる一般的な「フォームサニタイザー」はありますか? form.clean()はそれを何もしていないようです-htmlタグはすべてまだcleaned_dataにあります。または、実際にこれをすべて手動で行う(そしてフォームのclean()メソッドをオーバーライドする)ことが私の唯一のオプションですか?
Djangoには striptags というテンプレートフィルターが付属しており、テンプレートで使用できます。
value|striptags
strip_tags
にある関数Django.utils.html
を使用します。フォームデータのクリーンアップにも利用できます。
from Django.utils.html import strip_tags
message = strip_tags(form.cleaned_data['message'])
strip_tagsは実際に入力からタグを削除しますが、これは意図したものではない可能性があります。
文字列を、山かっこ、アンパサンド、引用符を対応するHTMLエンティティに変換した「安全な文字列」に変換するには、 escape filterを使用できます。
from Django.utils.html import escape
message = escape(form.cleaned_data['message'])
または、Pythonライブラリと呼ばれる bleach :
Bleachは、ホワイトリストベースのHTMLサニタイズおよびテキストリンク化ライブラリです。これは、someHTMLで信頼できないユーザー入力を受け取るように設計されています。
Bleachは
html5lib
を使用して、ブラウザと同じ方法でドキュメントフラグメントを解析するため、正規表現ベースのサニタイザーよりもはるかに優れた未知の攻撃に対する耐性が非常に高くなります。
例:
import bleach
message = bleach.clean(form.cleaned_data['message'],
tags=ALLOWED_TAGS,
attributes=ALLOWED_ATTRIBUTES,
styles=ALLOWED_STYLES,
strip=False, strip_comments=True)