我有一些想要添加到页面的 html(在本例中是通过 TinyMCE 创建的)。但是,出于安全原因,我不想只打印用户输入的所有内容。
有谁知道只允许呈现 html 的安全子集的模板标签(最好是过滤器)?
我意识到降价和其他人这样做。但是,他们还添加了额外的标记语法,这可能会让我的用户感到困惑,因为他们使用的是不了解降价的富文本编辑器。
我有一些想要添加到页面的 html(在本例中是通过 TinyMCE 创建的)。但是,出于安全原因,我不想只打印用户输入的所有内容。
有谁知道只允许呈现 html 的安全子集的模板标签(最好是过滤器)?
我意识到降价和其他人这样做。但是,他们还添加了额外的标记语法,这可能会让我的用户感到困惑,因为他们使用的是不了解降价的富文本编辑器。
有removetags,但它是一种黑名单方法,当标签看起来与 Django 所期望的格式不完全一样时,它无法删除标签,当然,由于它不会尝试删除属性,因此它完全容易受到 1000 种其他方式的攻击不涉及<script>
标签的脚本注入。这是一个陷阱,提供了安全的假象,而实际上根本没有提供真正的安全。
基于 regex hacking 的 HTML 清理方法几乎不可避免地完全失败。使用真正的 HTML 解析器获取提交内容的对象模型,然后以已知良好的格式过滤和重新序列化,通常是最可靠的方法。
如果您的富文本编辑器输出 XHTML,这很容易,只需使用 minidom 或 etree 来解析文档,然后遍历它,删除除已知良好的元素和属性之外的所有元素和属性,最后转换回安全的 XML。另一方面,如果它吐出 HTML,或允许用户输入原始 HTML,您可能需要在其上使用 BeautifulSoup 之类的东西。请参阅此问题进行一些讨论。
过滤 HTML 是一个庞大而复杂的主题,这就是为什么许多人更喜欢带有限制性标记的文本语言的原因。
使用 HTML Purifier、html5lib 或其他为进行 HTML 清理而构建的库。
您可以使用removetags
指定要删除的标签列表:
{{ data|removetags:"script" }}