【发布时间】:2010-10-30 01:40:10
【问题描述】:
如果我有一个人们放置 cmets 的盒子,然后我像这样显示该评论...我应该逃避吗?
{{ c.title }}
【问题讨论】:
标签: python django templates escaping
如果我有一个人们放置 cmets 的盒子,然后我像这样显示该评论...我应该逃避吗?
{{ c.title }}
【问题讨论】:
标签: python django templates escaping
实际上,这取决于。 Django 的模板引擎会自动转义,所以你真的不需要转义。
如果您添加模板过滤器“安全”,例如{{c.title|safe}},那么您确实需要担心诸如 html 注入之类的事情,因为“安全”将字符串标记为这样,这意味着它不会被转义。
还有一个 {% autoescape on %}...{% endautoescape %} 模板标签,如果需要,可以将其中的“on”更改为“off”。默认开启,不需要标签。
其他模板引擎可能默认不转义,Jinja2 就是其中之一。
【讨论】:
|safe 是为了让它安全
HTML 自动转义默认是开启的,所以在大多数情况下你不需要手动转义,但不是全部!
在 HTML 元素中转储变量的内容是可以的:
<p>{{ variable }}</p>
Django 会自动转义字符<、>、&、" 和',这正是这里所需要的。
也可以在属性中转储变量,因为 " 和 ' 都已转义,但请确保您记得包含引号,因为不会转义空格:
<span class="{{ variable }}">...</span> <!-- Good -->
<span class={{ variable }}>...</span> <!-- Bad -->
如果您想在内联 Javascript 中使用字符串,您必须使用 escapejs 过滤器,并且不要忘记引号。这可以防止转义 Javascript 变量的引号和使用 </script> 转义 <script> 标记:
<script>
var value = "{{ variable|escapejs }}";
</script>
【讨论】:
escapejs 是我要找的那个。我在任何地方都找不到这个
是的!如果他们输入<script>alert('boom');</script> 作为标题怎么办?
Django 自动转义使这变得更容易。
【讨论】:
自动转义在 django 模板中默认开启,所以你不需要使用转义。当您想要关闭它并让模板渲染系统知道您的日期在未转义的形式中是安全的时,使用安全。有关详细信息,请参阅 django 文档:
【讨论】: