jinja2(Flask)中默认自动转义吗?

问题描述 投票:0回答:2

我正在研究一些网站中的一些安全错误,想知道 jinja2 是否默认启用自动转义。根据 Jinja 文档(http://jinja.pocoo.org/docs/2.9/faq/#why-is-autoescaping-not-the-default),它没有,但是当我测试该应用程序时在新系统上,它已启用(不过我可能不小心这样做了,不确定。

有人能解释一下吗?

python flask jinja2
2个回答
3
投票

根据

flask
文档

除非定制,Jinja2 由 Flask 配置如下:

使用

render_template()
时,所有以 .html、.htm、.xml 和 .xhtml 结尾的模板都会启用自动转义。

还有:

使用

render_template_string()
时,所有字符串都会启用自动转义。

最后:

模板可以使用

{% autoescape %}
标签选择加入/退出自动转义。

因此,虽然

jinja
默认情况下可能不会自动转义,但
flask
默认情况下会打开 Jinja 的自动转义。


3
投票

正如 @mgilson 回答所述,默认情况下不会在所有文件上启用自动转义,而仅在以

.html
.htm
.xml
.xhtml
结尾的文件上启用自动转义。并非每个人都使用这些扩展,因为它们可能会产生误导:它们包含的代码不是正常的 (X)HTML 代码,而是 Jinja 模板;为了澄清这一点,有些人使用扩展名
.j2

为了对所有文件启用自动转义(无论其扩展名如何),可以使用以下代码:

app.jinja_options["autoescape"] = True
© www.soinside.com 2019 - 2024. All rights reserved.