Выбор ответа Middle XSS и CSP спрашивают часто обновлено

Ссылки из пользовательских данных

Вопрос

Почему во Vue код <a :href="user.website">сайт</a> может быть уязвим к XSS, хотя Vue экранирует вывод?

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

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

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

Коротко

Правильный ответ: Экранирование не проверяет схему URL: javascript:alert(1) выполнится по клику. В строке javascript:alert(1) нет символов, которые меняет экранирование, поэтому она попадает в href как есть.

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

  1. Vue экранирует текстовые узлы, а значения атрибутов вставляет без экранирования
  2. Уязвимость появляется только при серверном рендеринге, в браузере Vue её чинит
  3. Код безопасен: Vue сам удаляет ссылки со схемой javascript: из привязок href
  4. Экранирование не проверяет схему URL: javascript:alert(1) выполнится по кликуправильный ответ

Разбор

В строке javascript:alert(1) нет символов, которые меняет экранирование, поэтому она попадает в href как есть. Документация Vue прямо говорит, что URL не санитизируются и проверять их нужно самим: только http, https и относительные. Атрибуты Vue экранирует, SSR тут не ключевой фактор.

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

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