Когда я должен использовать escape и safe в системе шаблонов Django? - PullRequest
9 голосов
/ 30 октября 2010

Если у меня есть поле, в которое люди помещают комментарии, а затем я отображаю этот комментарий следующим образом ... я должен уйти?

{{ c.title }}

Ответы [ 4 ]

16 голосов
/ 30 октября 2010

На самом деле, это зависит.Движок шаблонов в Django выполняет автоматический выход, так что вам на самом деле не нужно убегать.

Если вы добавляете шаблонный фильтр «безопасный», такой как {{c.title|safe}}, то вам нужно беспокоиться о таких вещах, как внедрение html, потому что «безопасный»"помечает строку как таковую, и это означает, что она не будет экранирована.

Существует также шаблонный шаблон {% autoescape on%} ... {% endautoescape%}, где« on »может бытьизменено на «выкл», если необходимо.По умолчанию он включен, и тег не нужен.

Другие движки шаблонов могут не экранироваться по умолчанию, Jinja2 является одним из них.

5 голосов
/ 12 августа 2016

Автоматическое экранирование HTML включено по умолчанию, поэтому вам не нужно вручную экранировать в большинстве случаев , но не все !

Сброс содержимого переменной внутри HTMLЭлемент в порядке:

<p>{{ variable }}</p>

Джанго автоматически экранирует символы <, >, &, " и ', что и нужно здесь.

Можно также сбросить переменную внутри атрибута, поскольку " и ' оба экранированы, но не забудьте включить кавычки, поскольку пробелы не экранированы:

<span class="{{ variable }}">...</span> <!-- Good -->
<span class={{ variable }}>...</span>   <!-- Bad -->

ЕслиВы хотите использовать строку внутри встроенного Javascript, вы должны использовать фильтр escapejs, и не забывайте кавычки.Это защищает как от выхода из кавычек для переменной Javascript, так и от выхода из тега <script> с помощью </script>:

<script>
   var value = "{{ variable|escapejs }}";
</script>
3 голосов
/ 30 октября 2010

Да! Что если они введут <script>alert('boom');</script> в качестве заголовка?

Django autoescape делает это намного проще.

1 голос
/ 30 октября 2010

Автоматическое экранирование по умолчанию включено в шаблонах django, поэтому вам не нужно использовать escape.Безопасный используется, когда вы хотите отключить его и дать знать системе визуализации шаблонов, что ваша дата безопасна в неоткрытом виде.Подробности смотрите в документации django:

...