Выбор ответа Middle XSS и CSP обновлено
Экранировать при сохранении или при выводе
Вопрос
Команда решила экранировать HTML при сохранении комментария в базу, чтобы «защититься навсегда». Что не так?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Экранируют при выводе под контекст: в JSON, атрибуте или письме HTML-экранирование не то. Контекст известен только в момент вывода: HTML-текст, атрибут, URL, JavaScript, CSV.
Варианты ответа
- Всё правильно: экранированные данные безопасны в любом месте, куда их потом выведут
- Нужно экранировать дважды: при сохранении в базу и ещё раз при выводе в шаблон
- Экранирование не нужно, если сайт работает по HTTPS с флагом HSTS
- Экранируют при выводе под контекст: в JSON, атрибуте или письме HTML-экранирование не топравильный ответ
Разбор
Контекст известен только в момент вывода: HTML-текст, атрибут, URL, JavaScript, CSV. Экранирование при сохранении даёт двойное экранирование в одних местах и недостаточное в других. Двойное экранирование ломает отображение, а HTTPS к XSS отношения не имеет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.