【问题标题】:Django - safely render HTML in templateDjango - 在模板中安全地呈现 HTML
【发布时间】:2020-03-18 15:24:41
【问题描述】:
我正在构建一个 django Web 应用程序,用户可以在其中通过 tinymce 编辑器提交文本。
对于该任务,我使用django-tinymce 扩展名。
问题:
像这样使用safe 过滤器在模板中呈现 HTML 是否安全? :
{{ richtext | safe }}
如果不是,如何保证安全?
【问题讨论】:
标签:
django
security
django-templates
tinymce
code-injection
【解决方案1】:
如果 html 来自可靠的来源,例如您自己,那么它(很可能)是安全的。但是,如果您允许您网站的用户提交他们自己的 html 标记,那么这是不安全的。
但有时需要在 django 的模板中显示 html 标记,别无选择,只能使用 safe 过滤器。在这些情况下,解决方案是“清理” html 代码。
“清理”意味着您只保留数据中的安全 html 标签并删除所有不安全或不需要的标签(如 script 或 style 标签)。
要清理数据,您可以使用bleach 库。
这是一个示例(取自文档):
import bleach
bleach.clean('an <script>evil()</script> example')
# Output -> u'an <script>evil()</script> example'
这个库还有 django 应用程序:django-bleach。