python - Desinfección de HTML en datos de formularios enviados
django forms (3)
¿Existe un "desinfectante de formularios" genérico que pueda usar para garantizar que todo el código html / scripting se elimine del formulario enviado? form.clean () no parece hacer nada de eso, las etiquetas html todavía están en clean_data. ¿O, en realidad, hacer esto de forma manual (y anular el método clean () del formulario) es mi única opción?
Alternativamente, hay una biblioteca de Python llamada bleach :
Bleach es una biblioteca de saneamiento HTML y de enlace de texto basada en listas blancas. Está diseñado para tomar información de usuario no confiable con algo de HTML.
Debido a que Bleach utiliza
html5lib
para analizar fragmentos de documentos de la misma manera que lo hacen los navegadores, es extremadamente resistente a ataques desconocidos, mucho más que los desinfectantes basados en expresiones regulares.
Ejemplo:
import bleach
message = bleach.clean(form.cleaned_data[''message''],
tags=ALLOWED_TAGS,
attributes=ALLOWED_ATTRIBUTES,
styles=ALLOWED_STYLES,
strip=False, strip_comments=True)
Django viene con un filtro de plantilla llamado striptags , que puedes usar en una plantilla:
value|striptags
Utiliza la función strip_tags
que vive en django.utils.html
. Puede utilizarlo también para limpiar los datos de su formulario:
from django.utils.html import strip_tags
message = strip_tags(form.cleaned_data[''message''])
strip_tags en realidad elimina las etiquetas de la entrada, lo que puede no ser lo que quieres.
Para convertir una cadena en una "cadena segura" con corchetes angulares, ampersands y comillas convertidas a las entidades HTML correspondientes, puede usar el filtro de escape :
from django.utils.html import escape
message = escape(form.cleaned_data[''message''])