Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 清理提交表单数据中的HTML_Python_Django_Forms_Sanitization - Fatal编程技术网

Python 清理提交表单数据中的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

是否有一个通用的“表单消毒器”,我可以使用它来确保所有html/脚本都从提交的表单中剥离出来
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)