Выбор ответа Middle XSS и CSP спрашивают часто обновлено
Ссылки из пользовательских данных
Вопрос
Почему во Vue код <a :href="user.website">сайт</a> может быть уязвим к XSS, хотя Vue экранирует вывод?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Экранирование не проверяет схему URL: javascript:alert(1) выполнится по клику. В строке javascript:alert(1) нет символов, которые меняет экранирование, поэтому она попадает в href как есть.
Варианты ответа
- Vue экранирует текстовые узлы, а значения атрибутов вставляет без экранирования
- Уязвимость появляется только при серверном рендеринге, в браузере Vue её чинит
- Код безопасен: Vue сам удаляет ссылки со схемой javascript: из привязок href
- Экранирование не проверяет схему URL:
javascript:alert(1)выполнится по кликуправильный ответ
Разбор
В строке javascript:alert(1) нет символов, которые меняет экранирование, поэтому она попадает в href как есть. Документация Vue прямо говорит, что URL не санитизируются и проверять их нужно самим: только http, https и относительные. Атрибуты Vue экранирует, SSR тут не ключевой фактор.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.