jinja2:html转义变量

时间:2009-10-12 20:00:49

标签: python security escaping jinja2

如何在jinja2中html-escape危险的未经过类型化的输入?

我可以在模板中进行,还是必须在python代码中完成?

我有一个可能包含da< ngero> u& s chars的变量。我如何在jinja2中逃脱它

5 个答案:

答案 0 :(得分:36)

e.g。

{{ user.username|e }}

通过|e过滤器

进行管道传输

Jinija: Template Designer Documentation -> Builtin Filters: Escape

答案 1 :(得分:14)

您还可以告诉环境自动查看所有内容:

e = Environment(loader=fileloader, autoescape=True)

注意:在jinja1中这是auto_escape

答案 2 :(得分:6)

如果你想在你的程序中转义html,你可以这样做(例子):

>>> import jinja2
>>> jinja2.__version__
'2.6'
>>> a
'<script>alert("yy")</script>'
>>> jinja2.escape(a)
Markup(u'&lt;script&gt;alert(&#34;yy&#34;)&lt;/script&gt;')
>>> str(jinja2.escape(a))
'&lt;script&gt;alert(&#34;yy&#34;)&lt;/script&gt;'

答案 3 :(得分:1)

Flask有一个内置的tojson过滤器:

http://flask.pocoo.org/docs/templating/#standard-filters

答案 4 :(得分:-1)

您可以进行字符串检查并替换为相应的转义字符。

例如:string=I am a special character <
执行以下操作:

string.replace("<","&lt ;")

请注意,在您的代码中,t 和 ; 之间的空格。已被淘汰。不能在这里消除它,因为它会被格式化为显示 < :P

然后用jinja2打印出格式化后的字符串。 < 应该出现在您的显示中。