我是否可以使用通用的“表单清理程序”来确保从提交的表单中删除所有html /脚本? form.clean()似乎没有做任何事情 - html标签仍然在cleaning_data中。或者实际上手动执行此操作(并覆盖表单的clean()方法)是我唯一的选择吗?
答案 0 :(得分:47)
strip_tags实际上会从输入中删除标记,这可能不是您想要的。
要将字符串转换为“安全字符串”,并将尖括号,&符号和引号转换为相应的HTML实体,您可以使用escape过滤器:
from django.utils.html import escape
message = escape(form.cleaned_data['message'])
答案 1 :(得分:29)
Django附带了一个名为striptags的模板过滤器,可以在模板中使用:
value|striptags
它使用strip_tags
中的django.utils.html
函数。您也可以利用它来清理表单数据:
from django.utils.html import strip_tags
message = strip_tags(form.cleaned_data['message'])
答案 2 :(得分:18)
或者,有一个名为bleach的Python库:
Bleach是一个基于白名单的HTML清理和文本链接库。它旨在通过某些 HTML来接受不受信任的用户输入。
由于Bleach使用
html5lib
以与浏览器相同的方式解析文档片段,因此它对未知攻击具有极强的抵抗力,远远超过基于常规表达式的消毒剂。
示例:
import bleach
message = bleach.clean(form.cleaned_data['message'],
tags=ALLOWED_TAGS,
attributes=ALLOWED_ATTRIBUTES,
styles=ALLOWED_STYLES,
strip=False, strip_comments=True)