Ответ вслух Middle Безопасность фронтенда спрашивают часто обновлено

XSS и как от него защищаться

Вопрос

Что такое XSS, какие бывают виды и как защищаться во фронтенде?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

XSS - выполнение чужого кода в контексте нашего домена, то есть доступ к куками, токенам и DOM от имени пользователя. Хранимый приезжает из базы, отражённый - из параметра URL, DOM-based возникает целиком на клиенте.

Что должно прозвучать в ответе

  • выполнение чужого скрипта в контексте нашего домена

  • хранимый, отражённый и 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 ошибок.

Термины по теме