Выбор ответа Middle XSS и CSP обновлено

Экранировать при сохранении или при выводе

Вопрос

Команда решила экранировать HTML при сохранении комментария в базу, чтобы «защититься навсегда». Что не так?

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

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

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

Коротко

Правильный ответ: Экранируют при выводе под контекст: в JSON, атрибуте или письме HTML-экранирование не то. Контекст известен только в момент вывода: HTML-текст, атрибут, URL, JavaScript, CSV.

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

  1. Всё правильно: экранированные данные безопасны в любом месте, куда их потом выведут
  2. Нужно экранировать дважды: при сохранении в базу и ещё раз при выводе в шаблон
  3. Экранирование не нужно, если сайт работает по HTTPS с флагом HSTS
  4. Экранируют при выводе под контекст: в JSON, атрибуте или письме HTML-экранирование не топравильный ответ

Разбор

Контекст известен только в момент вывода: HTML-текст, атрибут, URL, JavaScript, CSV. Экранирование при сохранении даёт двойное экранирование в одних местах и недостаточное в других. Двойное экранирование ломает отображение, а HTTPS к XSS отношения не имеет.

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

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