在提交的表单数据中清理HTML

时间:2011-04-12 21:34:23

标签: python django forms sanitization

我是否可以使用通用的“表单清理程序”来确保从提交的表单中删除所有html /脚本? form.clean()似乎没有做任何事情 - html标签仍然在cleaning_data中。或者实际上手动执行此操作(并覆盖表单的clean()方法)是我唯一的选择吗?

3 个答案:

答案 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)