关于安全性:Django – 在模板中安全地渲染 HTML

Django - safely render HTML in template

我正在构建一个 django Web 应用程序,用户可以在其中通过 tinymce 编辑器提交文本。

对于该任务,我使用 django-tinymce 扩展名。

问题:

像这样使用 safe 过滤器在模板中呈现 HTML 是否安全? :

1
{{ richtext | safe }}

如果不是,如何保证安全?


如果 html 来自可靠的来源,例如您自己,那么它(很可能)是安全的。但是如果您允许您网站的用户提交他们自己的 html 标记,那么它是不安全的。

但有时需要在 django 的模板中显示 html 标记,而别无选择,只能使用 safe 过滤器。在这些情况下,解决方案是"清理" html 代码。

"Sanitizing" 意味着您只保留数据中的安全 html 标签,并删除所有不安全或不需要的标签(如 scriptstyle 标签)。

为了清理数据,您可以使用 bleach 库。

这是一个示例(取自文档):

1
2
3
4
5
import bleach

bleach.clean('an evil() example')

# Output -> u'an evil() example'

这个库还有 django 应用程序:django-bleach.