モデルのTextFieldに書き込むときに、Djangoの自動HTMLエスケープをオフにするにはどうすればよいですか?
Djangoの safe フィルターを使用するだけです。テンプレートでは、次のようにします。
{{ instance.my_text_field|safe }}
これを行う1つの方法は、安全とマークされたデータを返す関数をモデルに配置することです。
from Django.utils.safestring import mark_safe
class MyModel(models.Model):
my_textfield = models.TextField()
def display_my_safefield(self):
return mark_safe(self.my_textfield)
次に、テンプレートで次を使用する必要があります。
{{ instance.display_my_safefield }}
より良いそれを行う方法は@DanielVassalloが説明した通りだと思います。
このようにして、特にクロスサイトスクリプティングから保護するために、エスケープせずに表示するHTMLコードに対していくつかのセキュリティ操作を実行できます([〜#〜] xss [〜# 〜])。
たとえば、_my_textfield
_にscriptタグが含まれているかどうかを確認できます。
その場合、インスタンスを悪意のあるものとしてマークし、エスケープバージョンの_my_textfield
_(通常のDjango動作))を返します。
それ以外の場合は、_mark_safe
_を使用して、safeとマークされたHTMLコードを返します。
ここに:
_from Django.utils.safestring import mark_safe
class MyModel(models.Model):
my_textfield = models.TextField()
is_malisious = models.BooleanField(default=False)
def display_my_safefield(self):
if '<script>' in self.my_textfield:
self.is_malicious = True
self.save()
return self.my_textfield
return mark_safe(self.my_textfield)
_
そして、これらすべてはデータベースへの移行を必要としません。
モデルのsave()
メソッドをオーバーライドし、その中の悪意のあるコンテンツに対するチェックやその他の必要な操作を含めることで、このセキュリティ操作を実行できると思います。次に、保存されたコンテンツが安全であることを確認した場合は、@ bjunixソリューションを使用できます。