web-dev-qa-db-ja.com

jinja2で危険な無害化された入力をhtmlエスケープするにはどうすればよいですか?

テンプレート内で実行できますか、それともpythonコードで実行する必要がありますか?

Da <ngero> u&s文字を含む可能性のある変数があります。 jinja2でエスケープするにはどうすればよいですか?

22
flybywire

例えば.

{{ user.username|e }}

|eフィルターにパイプします

Jinja:テンプレートデザイナーのドキュメント-> HTMLエスケープ

41
jitter

また、すべてを自動エスケープするように環境に指示することもできます。

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

注:jinja1ではこれはauto_escapeです

15
Jeroen Dierckx

プログラムで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;'
6
jianpx

Flaskにはtojsonフィルターが組み込まれています。

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

1
philfreo