Кейс: где хранить токены SPA
Вопрос
Команда делает SPA с API на поддомене и спорит: хранить токен в localStorage или в cookie. Что вы порекомендуете и почему?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сравнить риски: 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 ошибок.