Desinfección de HTML en los datos del formulario enviado.

¿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, todas las tags html aún están en clean_data. ¿O, en realidad, hacer esto de forma manual (y reemplazar el método clean () para el formulario) es mi única opción?

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

Alternativamente, hay una biblioteca de Python llamada bleach :

Bleach es una biblioteca de desinfección de HTML y 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)