Где лучше хранить данные для авторизации?
DOM и браузер
Данные для авторизации лучше хранить безопасно: access token — в памяти, refresh token — в `HttpOnly` cookie. localStorage избегают из-за уязвимости к XSS.
Рекомендуемое хранение
Access token
- В памяти приложения (переменная/стор) — нужен в JS для заголовка, безопаснее localStorage.
- Восстанавливается через refresh при старте.
Refresh token
- `HttpOnly` cookie с
SecureиSameSite— недоступен из JS (защита от XSS), браузер шлёт автоматически.
Почему не localStorage
localStorage доступен любому JS, включая XSS-скрипт → украдут токен:
localStorage.getItem('token'); // уязвимо к XSSСравнение мест хранения
- Память — Безопасность: высокая; Переживает перезагрузку: нет
- HttpOnly cookie — Безопасность: высокая (защита от XSS); Переживает перезагрузку: да
- localStorage — Безопасность: низкая (XSS); Переживает перезагрузку: да
- обычная cookie — Безопасность: средняя (XSS + CSRF); Переживает перезагрузку: да
Дополнительно
- Короткий access + ротация refresh + отзыв на сервере.
- HTTPS обязателен.
- Проверка прав — на сервере (клиент только UX).
Коротко для собеседования
Данные авторизации: access token — в памяти (восстанавливается через refresh), refresh token — в HttpOnly cookie (Secure, SameSite — защита от XSS/CSRF). localStorage избегают — любой JS (включая XSS) прочитает. Это самое безопасное сочетание.