我想在django 1.0模板中显示一些html,为此我一直在做这样的事情:
{% autoescape off %}{{ var.text }}{% endautoescape %}
我只是想知道这有多安全?我是否仍然可以防止SQL注入和跨站点脚本以及其他类似的漏洞?
===编辑=======
此文本将来自用户,那么在django模板中安全显示html的最佳方法是什么?
答案 0 :(得分:9)
autoescape可以防止跨站点脚本,而不是sql注入(需要make sure your inputs are scrubbed)。关闭autoescape意味着你相信“文本”中的内容,无论它来自何处,都不是恶意的(即,用户不可能创建或修改文本中的内容)。如果该假设有效,那么您可以安全地反对跨站点脚本,否则,这是一个安全漏洞。
答案 1 :(得分:5)
不,当您在模板引擎中将HTML标记为安全时,您将负责确保渲染是安全的。
此外,您可以通过更改
来简化(缩短)您的代码{% autoescape off %}
{{ var.text }}
{% endautoescape %}
到
{{ var.text|safe }}
答案 2 :(得分:1)
这是否安全完全取决于var.text的来源。如果它是一个完全由你控制的促销信息(例如),那么只要你不用脚射击自己,你就是安全的。如果var.text以某种方式来自用户,那么你就处于危险之中。