html - 用于渲染 html 子集的 Django templatetag

标签 html django django-templates markdown templatetags

我有一些 html(在本例中是通过 TinyMCE 创建的),我想将其添加到页面中。但是,出于安全原因,我不想只打印用户输入的所有内容。

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

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

最佳答案

removetags ,但这是一种黑名单方法,当标签看起来与 Django 期望的格式良好的标签不完全一样时,它无法删除标签,当然,由于它不尝试删除属性,因此完全容易受到 1,000 种其他脚本方式的攻击-不涉及 <script> 的注入(inject)标签。这是一个陷阱,提供安全的假象,但实际上根本不提供真正的安全。

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

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

过滤 HTML 是一个庞大而复杂的主题,这就是为什么许多人更喜欢带有限制性标记的文本语言。

关于html - 用于渲染 html 子集的 Django templatetag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709801/

相关文章:

html - :hover triggered directly after page reload on Firefox (but not on Mac OS X Chrome)

html - 将卡片列表正确放置在网页元素下方,剪裁问题

python - 具有 azure Web 应用程序和存储的 Django channel

html - form.is_valid() 返回 false (django)

Django 管理模板 : Accessing request object in template

javascript - jQuery 查找类并将其存储为变量

javascript - jQuery:如何包装选定的文本

python - <option> 使用 Django Forms API 对选择输入进行级别控制

python - 枚举 Django 数据库缓存中的键

javascript - django模板-日期格式问题