Ответ вслух Senior CSRF, SameSite и CORS обновлено

Кейс: где хранить токены SPA

Вопрос

Команда делает SPA с API на поддомене и спорит: хранить токен в localStorage или в cookie. Что вы порекомендуете и почему?

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

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

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

Коротко

Образцовый ответ: «У каждого варианта свой главный риск. Токен в localStorage украдёт любой XSS, и украденный токен работает где угодно.

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

  • Сравнить риски: XSS крадёт токен из localStorage, cookie требует защиты от CSRF

  • Рекомендация: сессия или refresh-токен в cookie HttpOnly Secure SameSite, короткий access в памяти

  • CSRF-защита для cookie: SameSite, токен или проверка Origin

  • Учесть поддомены: SameSite считает их одним сайтом

  • CORS: точный allowlist origin, credentials только где нужно

  • В любом случае строгая защита от XSS и CSP

Что могут спросить следом

  • Что если API на совсем другом домене?
  • Как вы будете обновлять access-токен без перезагрузки?

Разбор

Образцовый ответ: «У каждого варианта свой главный риск. Токен в localStorage украдёт любой XSS, и украденный токен работает где угодно. Cookie с HttpOnly скрипт не прочитает, но нужна защита от CSRF. Я бы выбрал: refresh-токен или сессия в cookie с HttpOnly, Secure, SameSite=Lax и префиксом __Host-, короткий access-токен в памяти приложения. Для изменяющих запросов CSRF-токен или проверка Origin, потому что SameSite не различает поддомены одного сайта. CORS настраиваю точным списком origin. И обязательно CSP и ревью опасных мест на XSS: при XSS атакующий всё равно сможет действовать от имени пользователя, пока вкладка открыта».

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

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

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