为什么在jinja2 Python中使用“ |安全”

Muh*_*ood 3 python jinja2 flask

我正在遵循Flask教程,其中他在jinja2模板中使用“ | safe”。为什么我们需要这个管道符号和安全性?

在不使用安全的情况下,它会打印所有html标签。

通过使用| safe,它显示正确的格式。为什么这样工作?

下面是jinja2代码:

{% extends "layout.html" %}

{% block body %}
    <h1>{{article.title}}</h1>
    <small>Written by {{article.author}} on {{article.create_date}}</small>
    <hr>
    <div>
        {{article.body | safe}}
    </div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

Art*_*ski 5

使用| safeJinja2可以在变量中显示符号,这意味着它不会将“危险”符号转换为html实体(Jinja2默认情况下会转义“危险”符号)。如果您信任变量的内容,请使用此选项,因为在相反情况下,可能会存在漏洞,例如XSS


Ste*_*uch 5

来自文档

\n
\n

从模板生成 HTML 时,始终存在变量包含影响生成的 HTML 的字符的风险。有两种方法:

\n
    \n
  • 手动转义每个变量;或者
  • \n
  • 默认情况下自动转义所有内容。
  • \n
\n

Jinja 两者都支持。

\n
\n

默认情况下自动转义所有内容的模式下,要将内容标记为安全,因此不需要转义,请使用过滤器:

\n
| safe\n
Run Code Online (Sandbox Code Playgroud)\n

使用自动转义

\n