python django forms sanitization

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''])