Django templatetag用于呈现html的子集

def*_*rex 2 html django markdown django-templates templatetags

我有一些html(在这种情况下通过TinyMCE创建)我想添加到页面.但是,出于安全原因,我不想只打印用户输入的所有内容.

有没有人知道一个模板标签(最好是一个过滤器),它只允许渲染一个安全的html子集?

我意识到降价和其他人这样做.但是,它们还添加了额外的标记语法,这可能会让我的用户感到困惑,因为他们使用的是不知道降价的富文本编辑器.

bob*_*nce 6

removetags,但它是一个黑名单的做法,无法删除标签时,他们不完全一样合式标签Django的预期,当然因为它不试图删除属性是完全易受1000种其他方式脚本注入不涉及<script>标记.它是一个陷阱,提供安全的幻觉,而实际上根本没有真正的安全.

基于正则表达式黑客攻击的HTML-sanitisation方法几乎不可避免地完全失败.使用真实的HTML解析器获取提交内容的对象模型,然后以已知良好的格式过滤和重新序列化通常是最可靠的方法.

如果您的富文本编辑器输出XHTML很简单,只需使用minidom或etree来解析文档,然后遍历它,删除所有已知良好的元素和属性,最后转换回安全的XML.另一方面,如果它吐出HTML,或者允许用户输入原始HTML,则可能需要在其上使用BeautifulSoup之类的东西.有关讨论,请参阅此问题.

过滤HTML是一个庞大而复杂的主题,这就是为什么许多人更喜欢带限制文本的文本.