Python 清理提交表单数据中的HTML
是否有一个通用的“表单消毒器”,我可以使用它来确保所有html/脚本都从提交的表单中剥离出来Python 清理提交表单数据中的HTML,python,django,forms,sanitization,Python,Django,Forms,Sanitization,是否有一个通用的“表单消毒器”,我可以使用它来确保所有html/脚本都从提交的表单中剥离出来form.clean()似乎没有做任何这方面的工作-html标记仍然都在cleaned\u data中。或者说,我唯一的选择就是手动完成这一切(并覆盖表单的clean()方法)?Django附带了一个名为的模板过滤器,您可以在模板中使用它: value|striptags 它使用函数strip\u tags,该函数位于django.utils.html中。您还可以利用它来清理表单数据: from dja
form.clean()
似乎没有做任何这方面的工作-html标记仍然都在cleaned\u data
中。或者说,我唯一的选择就是手动完成这一切(并覆盖表单的clean()
方法)?Django附带了一个名为的模板过滤器,您可以在模板中使用它:
value|striptags
它使用函数strip\u tags
,该函数位于django.utils.html
中。您还可以利用它来清理表单数据:
from django.utils.html import strip_tags
message = strip_tags(form.cleaned_data['message'])
strip_tags
实际上是从输入中删除标记,这可能不是您想要的
要将字符串转换为“安全字符串”,并将尖括号、符号和引号转换为相应的HTML实体,可以使用过滤器:
或者,还有一个Python库,名为: 漂白剂是一个基于白名单的HTML净化和文本链接库。它被设计为使用一些HTML接受不可信的用户输入 由于漂白剂使用
html5lib
解析文档片段的方式与浏览器相同,因此它对未知攻击具有极强的抵御能力,比基于正则表达式的净化剂更具抵御能力
例如:
import bleach
message = bleach.clean(form.cleaned_data['message'],
tags=ALLOWED_TAGS,
attributes=ALLOWED_ATTRIBUTES,
styles=ALLOWED_STYLES,
strip=False, strip_comments=True)
相关:“请注意,strip_标记结果可能仍然包含不安全的HTML内容,因此您可以使用escape()使其成为安全字符串。”-strip_标记()本身是不够的,strip_标记()+escape()组合会产生非常难看的文本,尤其是在它合法包含撇号的情况下。只需使用漂白剂.clean()。是否有任何理由去除标签?如果用户提交类似于标签的内容,那么最好将其转义,但使其看起来像输入。假设我输入了类似于
坏笑话的内容
import bleach
message = bleach.clean(form.cleaned_data['message'],
tags=ALLOWED_TAGS,
attributes=ALLOWED_ATTRIBUTES,
styles=ALLOWED_STYLES,
strip=False, strip_comments=True)