Выбор ответа Junior Безопасность веб-приложения спрашивают часто обновлено

Фильтр safe в шаблоне

Вопрос

Чем опасен {{ comment.text|safe }} в шаблоне Django?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Отключает автоэкранирование: <script из комментария выполнится у читателей. Django по умолчанию экранирует <, , &, кавычки. safe и marksafe говорят «этот текст уже безопасен», и он выводится как есть.

Варианты ответа

  1. Делает текст недоступным для поисковиков, потому что он рендерится как HTML-блок
  2. Отключает автоэкранирование: <script> из комментария выполнится у читателейправильный ответ
  3. Замедляет рендер шаблона, так как Django заново компилирует его при каждом выводе
  4. Ничем: safe проверяет текст санитайзером и удаляет опасные теги перед выводом

Разбор

Django по умолчанию экранирует <, >, &, кавычки. |safe и mark_safe говорят «этот текст уже безопасен», и он выводится как есть. Для пользовательского ввода это прямой путь к XSS. Если нужен форматированный текст, его очищают санитайзером по белому списку тегов при сохранении или выводе. Название фильтра вводит в заблуждение: он ничего не проверяет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме