not - Deshabilite el escapado de HTML en Textfield de Django
imagefield django (3)
¿Cómo puedo desactivar el escaneo automático de HTML de Django cuando escribo en el TextField del modelo?
Creo que la mejor manera de hacerlo es como lo describió @Daniel Vassallo.
¿Por qué?
Debido a que de esta manera, puede realizar algunas operaciones de seguridad en el código HTML que desea visualizar sin escapar, especialmente para proteger contra el uso de scripts de sitios cruzados ( XSS ).
Por ejemplo, puede verificar si my_textfield
contiene una etiqueta de script .
Si es así, marque la instancia como maliciosa y devuelva una versión escapada de my_textfield
(el comportamiento normal de Django).
De lo contrario, use mark_safe
para devolver su código HTML marcado como seguro .
Aquí:
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)
Y todo esto no necesita migraciones a la base de datos.
Enfoque alternativo
Creo que puede hacer esta operación de seguridad anulando el método save()
de su modelo, e incluyendo el cheque y cualquier otra operación necesaria contra contenido malicioso dentro de él. Luego, puede usar la solución @bjunix si se aseguró de que el contenido guardado sea seguro.
Solo usa el filtro safe de django. En tu plantilla harías algo como esto:
{{ instance.my_text_field|safe }}
Una forma de hacerlo es poner una función en su modelo que devuelve los datos marcados como seguros:
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)
Luego, en la plantilla, deberías usar:
{{ instance.display_my_safefield }}