【问题标题】:Templates and markup模板和标记
【发布时间】:2011-09-17 23:45:53
【问题描述】:

我使用 Google App Engine 并且遇到了下一个问题。我需要将“

我的文本

”之类的数据存储在数据存储中。当我使用 Django 0,96 的模板时,一切都井井有条。文本以预期的标记显示。但是我将模板更改为 Django 1.2 的模板,并且我的标记已更改为 HTML 实体。如何解决这个问题?

附:我不使用 Django 助手或任何其他第三方库。


如果过滤器模式是模板的默认模式,那么使用“安全”或“自动转义”看起来就像是一个 hack。我试图了解 Django 的作者是如何想象自己使用模板的。我不认为除了材料出版物之外,记者也不会为其每篇文章创建模板。 IE。必须是某种允许格式文本、tinyMCE 或 Markdown 的方法。但是当标记存储在数据库中时,模板将其显示为 html 实体。

当然,可以使用“安全”或“自动转义”过滤器。但我不明白在大多数情况下何时禁用模板中的清理功能。

可能是我说的不对?我哪里错了?

【问题讨论】:

    标签: google-app-engine django-templates markup


    【解决方案1】:

    使用safe filterautoescape off 模板标签。确保您首先了解 XSS 是什么;用户输入的内容不应该被认为是安全的。

    回复:

    {{ body|safe }} 相当于自动转义块。我不知道为什么这不起作用,除非 T. Abilo 是正确的,并且数据存储区已经引用了 html。

    TinyMCE 很难防范 XSS,因为它会将展示性的 html 返回给您。 Markdown 编辑器(如 MarkItUp)更容易,因为您可以在服务器端安全地呈现 markdown。实际上,您需要一个过滤器来去除除展示性 html 白名单之外的所有内容:{{ body|presentationalonly }}This one 可以完成这项工作。 Bleach 可用于更严格的白名单。

    【讨论】:

    • 我知道 autosave off 并使用它,但它没有任何改变。我的代码: {% extends "index.html" %} {% block content %}

      {{ section_title }}

      {% autoescape off %}

      {{ body }}

      { % endautoescape %}

      {{ publication }}

      {% endblock %} 可能是我没有配置足够的 GAE 和 Django?我只是将 webapp_django_version = '1.2' 添加到空的 appengine_config.py 中。
    • 我也知道 XSS。但我不太了解目前如何将 django1.2 模板和使用 TinyMCE 格式化的文本结合起来。
    【解决方案2】:

    我遇到了类似的问题,所以也许您可以检查以下内容:

    • 标记是否在您的数据存储中显示为 "<p><" 等?
    • 如果是这样,您可以在模板中将其添加到字符串 .replace("<", "<").replace(">", ">"),同时仍使用自动转义或类似的东西
    • 如果有效,您也可以直接在处理程序中更改它,如下所述:http://wiki.python.org/moin/EscapingHtml

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 2020-10-29
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      相关资源
      最近更新 更多