Где хранить токен авторизации
Вопрос
Где хранить токен авторизации на фронтенде: в cookie или в localStorage? Объясни плюсы и минусы.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
localStorage доступен любому скрипту страницы, при XSS токен украдут
Токен в localStorage браузер сам не отправляет, поэтому CSRF ему не страшен
HttpOnly-кука не читается из JS, но автоматически отправляется, нужна защита от CSRF
Защита куки: HttpOnly, Secure, SameSite Lax или Strict, плюс CSRF-токен или проверка Origin
Частый компромисс: короткий access-токен в памяти, refresh-токен в HttpOnly-куке
XSS опасен в любом случае: он может делать запросы от имени пользователя
Что могут спросить следом
- Если токен в памяти, что будет при перезагрузке страницы?
- Зачем ротировать refresh-токен?
- Как SameSite влияет на сценарий, когда фронт и API на разных поддоменах?
Разбор
У обоих вариантов разные угрозы. localStorage читается любым JavaScript на странице, поэтому любая XSS сразу уносит токен, и атакующий может пользоваться им со своей машины. Зато браузер сам его никуда не прикладывает, и CSRF не работает. Кука с HttpOnly недоступна скрипту, её нельзя украсть через XSS, но браузер прикладывает её автоматически, значит нужна защита от CSRF: SameSite Lax или Strict, Secure и для чувствительных действий CSRF-токен или проверка Origin. На практике я выбираю схему с коротким access-токеном в памяти приложения и refresh-токеном в HttpOnly-куке с ротацией. При этом помню, что XSS остаётся опасной в любой схеме: внедрённый скрипт может действовать от имени пользователя прямо в его браузере, поэтому базовая защита это не допускать XSS.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Безопасность фронтенда»
- Защита на уровне заголовков
- XSS и как от него защищаться
- CSP
- CSRF
- Site и origin
- XSS
- Защита от кликджекинга
- Защищает ли CORS от CSRF