gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:10 27 4
gpt4 key购买 nike

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

有谁知道只允许呈现 html 的安全子集的模板标签(最好是过滤器)?

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

最佳答案

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

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

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

过滤 HTML 是一个庞大而复杂的话题,这就是为什么许多人更喜欢 text-with-restrictive-markup 语言的原因。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com