Вопрос проверяет понимание безопасного хранения аутентификационных токенов в клиентских приложениях, что критично для защиты от атак, таких как XSS и CSRF.
Выбор места хранения токенов (например, JWT) на клиенте напрямую влияет на безопасность приложения. Основные варианты — это localStorage, sessionStorage и HTTP-only cookies, каждый со своими рисками и преимуществами.
Оба хранилища доступны через JavaScript на той же странице. Это означает, что если злоумышленник сможет внедрить вредоносный скрипт (XSS-атака), он сможет прочитать токен и отправить его на свой сервер. localStorage сохраняет данные постоянно, а sessionStorage — только на время сессии, но оба одинаково уязвимы к XSS.
Куки с флагом HttpOnly устанавливаются сервером через заголовок Set-Cookie и автоматически отправляются браузером при каждом запросе к домену. Ключевое преимущество: JavaScript не может получить доступ к содержимому такой куки, что защищает токен от кражи через XSS.
Основной риск использования кук — атаки CSRF (межсайтовая подделка запроса). Злоумышленник может заставить браузер пользователя отправить запрос с куками на ваш сайт. Для защиты используйте:
SameSite=Strict или Lax для кук, чтобы ограничить отправку в межсайтовых запросах.res.cookie('access_token', token, {
httpOnly: true,
secure: true, // Только по HTTPS
sameSite: 'strict',
maxAge: 24 * 60 * 60 * 1000 // 1 день
});На клиенте вам не нужно вручную управлять этой кукой. Для API-запросов, требующих авторизации, кука будет отправляться автоматически.
Используйте HTTP-only cookies для хранения токенов, когда это возможно, особенно для традиционных веб-приложений с серверным рендерингом. Для SPA, где требуется явный контроль над токеном, рассмотрите комбинированный подход: храните refresh token в HTTP-only куке, а короткоживущий access token — в памяти JavaScript (но не в localStorage). Всегда включайте флаги secure и sameSite и реализуйте защиту от CSRF.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию