XSS и как от него защищаться
Вопрос
Что такое XSS, какие бывают виды и как защищаться во фронтенде?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
выполнение чужого скрипта в контексте нашего домена
хранимый, отражённый и DOM-based
React экранирует вывод по умолчанию
dangerouslySetInnerHTML снимает защиту - нужна санитизация
опасны также href с javascript: и подстановка в стили
второй рубеж - CSP и httpOnly-куки
Что могут спросить следом
- Чем CSRF отличается от XSS
- Как безопасно отрендерить пользовательский markdown
- Что делает CSP nonce
Разбор
XSS - выполнение чужого кода в контексте нашего домена, то есть доступ к куками, токенам и DOM от имени пользователя. Хранимый приезжает из базы, отражённый - из параметра URL, DOM-based возникает целиком на клиенте.
React экранирует всё, что вставляет как текст, - поэтому «из коробки» приложение защищено.
Дыры появляются там, где защиту снимают руками: dangerouslySetInnerHTML без санитизации
(DOMPurify), href={userInput} с javascript:, подстановка в style или в srcdoc.
Второй рубеж - Content-Security-Policy, запрещающий инлайн-скрипты, и httpOnly-куки, которые нельзя прочитать из JS даже при успешной атаке.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Безопасность фронтенда»
- CSRF
- Site и origin
- XSS
- Защита от кликджекинга
- Защищает ли CORS от CSRF
- Зачем nonce в CSP
- Найди XSS в коде
- Что даёт HttpOnly