【发布时间】:2009-09-11 20:33:09
【问题描述】:
我想在Django 1.0 模板中显示一些 HTML,为此我一直在做这样的事情:
{% autoescape off %}{{ var.text }}{% endautoescape %}
我只是想知道这有多安全?我是否仍然受到 SQL 注入和跨站点脚本以及其他类似漏洞的保护?
更新:
此文本将来自用户,那么在 Django 模板中安全显示 HTML 的最佳方式是什么?
【问题讨论】:
我想在Django 1.0 模板中显示一些 HTML,为此我一直在做这样的事情:
{% autoescape off %}{{ var.text }}{% endautoescape %}
我只是想知道这有多安全?我是否仍然受到 SQL 注入和跨站点脚本以及其他类似漏洞的保护?
更新:
此文本将来自用户,那么在 Django 模板中安全显示 HTML 的最佳方式是什么?
【问题讨论】:
自动转义可以防止跨站点脚本,而不是 sql 注入(您需要 make sure your inputs are scrubbed)。关闭自动转义意味着您相信“文本”中的内容,无论它来自何处,都不是恶意的(即,用户应该不可能创建或修改文本中的内容)。如果该假设成立,那么您可以安全地防止跨站点脚本,否则,这是一个安全漏洞。
【讨论】:
不,当您在模板引擎中将 HTML 标记为安全时,您有责任确保它可以安全呈现。
此外,您可以通过更改来稍微简化(好吧,缩短)代码
{% autoescape off %}
{{ var.text }}
{% endautoescape %}
到
{{ var.text|safe }}
【讨论】:
这是否安全完全取决于 var.text 的来源。如果它是完全由您控制的促销信息(例如),那么只要您不射中自己的脚,您就是安全的。如果 var.text 不知何故来自用户,那么你就有危险了。
【讨论】: