【问题标题】:How does Django handle escaping when I use a TinyMCE editor?当我使用 TinyMCE 编辑器时,Django 如何处理转义?
【发布时间】:2011-05-20 11:52:45
【问题描述】:

如何在页面上仅显示粗体、斜体和所有其他非安全问题 HTML?

【问题讨论】:

    标签: python html css django templates


    【解决方案1】:

    要显示所有 HTML(无转义),您可以使用 safe 过滤器

    {{ var|safe }}
    

    在您的情况下,如果您想转义除某些标签之外的所有内容,您可以编写自己的过滤器来执行此操作:

    {{ var|mysafe }}
    

    在这里阅读:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

    过滤器的算法可以是:

    1. 逃避一切
    2. 仅取消转义那些标记 允许(通过使用.replace 或 正则表达式)

    【讨论】:

      【解决方案2】:

      清理 HTML 是一个很难解决的问题。垃圾邮件发送者和其他讨厌的人一直在想出新的方法来通过卫生设施走私 HTML。最安全的选择是定义无害标签的白名单,并使用真正的 HTML 解析器严格过滤掉所有其他标签(not 使用正则表达式)。

      djangosn-ps.com 上有几个模板标签和过滤器,例如thisthis one。选择过滤器时,请注意它使用白名单和 HTML 解析器,如 lxml.html(最好是 lxml.html.clean)或 BeautifulSoup

      【讨论】:

        【解决方案3】:

        配置 TinyMCE 可能更有意义,因为用户只能输入您允许他的元素。 TinyMCE 为此提供了a powerful set of rules。如果您使用 django-tinymce,请参阅 this 以将 TINYMCE_DEFAULT_CONFIG 设置为您想要的选项。

        【讨论】:

        • 恶意人员只需禁用 JavaScript(或使用一开始就无法解释 JavaScript 的工具)即可绕过该障碍。 永远不要仅依赖客户端验证。 TIMEX 要求提供安全性,而这根本不提供任何安全性。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-10
        相关资源
        最近更新 更多