Где React не спасает от XSS
Вопрос
bio приходит от пользователя. Какой фрагмент React-кода уязвим к XSS?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
<p className="bio">{bio}</p><div dangerouslySetInnerHTML={{ __html: bio }} />правильный ответ<input type="text" value={bio} readOnly /><p title={bio} aria-label={bio}>Текст</p>
Разбор
React экранирует значения в тексте и атрибутах, поэтому {bio} в абзаце, value, title и aria-label безопасны: разметка выводится как текст. dangerouslySetInnerHTML вставляет строку как HTML без проверки, и <img src=x onerror=...> выполнится. Если HTML от пользователя действительно нужен, его прогоняют через санитайзер (DOMPurify). Ещё одно место, где React не помогает: пользовательский URL в href, протокол нужно проверять самому.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что не так с обработчиком postMessage
Следующий вопрос
Когда отправляется SameSite=Lax
Термины по теме
Ещё по теме «Безопасность фронтенда»
- Защита на уровне заголовков
- XSS и как от него защищаться
- CSP
- CSRF
- Site и origin
- XSS
- Защита от кликджекинга
- Защищает ли CORS от CSRF