В чем польза "| safe" при передаче переменных из Django в React.js?

Из нескольких статей и нескольких примеров, которые я видел, при передаче контекста переменной в javascript используется что-то вроде:

const variable_name = {{ variable | safe }}

Я пробовал гуглить, но, похоже, не нашел ответа. Как здесь используется слово "безопасный"? И когда мы его используем? Если у вас есть какие-либо ссылки или статьи, на которые я мог бы сослаться, это было бы очень полезно. Большое спасибо!

Фильтр safe указывает на то, что переменная не требует экранирования.

По умолчанию django будет экранировать все "потенциально опасные" символы, такие как HTML токены, например, при выводе переменной в HTML.

Например, если у вас есть переменная var1 = "<b>Hello</b>", то пишем так:

 {{ var1 | safe }}

Приводится к следующему HTML:

 <b>Hello</b>

Пока это:

 {{ var1 }}

Переводится так:

 %3Cb%3EHello%3C%2Fb%3E

Итак, в конечном результате, в первом случае вы увидите мир Hello жирным шрифтом, в то время как во втором примере вы увидите только строку <b>Hello</b>.

По умолчанию экранирование выполняется в основном для предотвращения XSS-атаки, когда злоумышленник может выполнить вредоносный код, передав, например, токен <script> внутри входных данных на веб-сайте.

Поэтому, как правило, вы можете использовать фильтр 'safe', когда вы точно знаете, что ваша строка не содержит опасных тегов, например, если вы сгенерировали эту переменную, не основываясь на пользовательском вводе.

Для получения дополнительной информации вы можете посмотреть официальную документацию: https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#std:templatefilter-safe

Также вы можете почитать о XSS атаках, об этом действительно много информации, просто погуглите.

Вернуться на верх