Как мне html-экранировать опасный недезинфицированный ввод в jinja2?

Могу ли я сделать это внутри шаблона или это нужно сделать в коде Python?

У меня есть переменная, которая может содержать символы da‹ngero›u&s. Как мне избежать этого в jinja2?


person flybywire    schedule 12.10.2009    source источник


Ответы (5)


e.g.

{{ user.username|e }}

Пропустить через фильтр |e

Jinja: Документация дизайнера шаблонов -> Экранирование HTML

person jitter    schedule 12.10.2009

Вы также можете указать среде автоматически экранировать все:

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

примечание: в jinja1 это auto_escape

person Jeroen Dierckx    schedule 29.09.2010

Если вы хотите избежать 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;'
person jianpx    schedule 08.04.2012


Вы можете выполнить проверку строки и заменить ее соответствующими экранированными символами.

Например: string=I am a special character <
Сделайте следующее:

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

Обратите внимание, что в вашем коде пробел между t и ; был устранен. Невозможно удалить это здесь, так как вместо этого будет отображаться ‹: P

Затем используйте jinja2, чтобы распечатать отформатированную строку. ‹ должен появиться на вашем дисплее.

person Huey Eng    schedule 21.12.2020