Как запретить сливать токен с ограниченным permission?
DOM и браузер
Слив токена с ограниченными правами предотвращают безопасным хранением (память/HttpOnly cookie), коротким сроком жизни, ограничением scope, привязкой к контексту и возможностью отзыва.
Меры защиты от слива
Безопасное хранение
- HttpOnly cookie — недоступна из JS (защита от XSS-кражи).
- В памяти — не в localStorage (XSS).
Короткий срок жизни
Токен быстро истекает — украденный скоро бесполезен:
Access token: 15 минут → окно использования малоОграничение прав (scope)
Токен только с минимально нужными правами (принцип наименьших привилегий) — украденный наносит меньше ущерба:
scope: 'read:orders' — только чтение, нельзя удалятьПривязка к контексту
- HTTPS — не перехватить в сети.
- SameSite cookie — защита от CSRF.
- Привязка к устройству/IP (опционально).
Возможность отзыва
Хранить/проверять токены на сервере, уметь инвалидировать (чёрный список, ротация refresh).
Против XSS (главный вектор кражи)
- Экранирование, CSP, санитизация, чтобы внедрённый скрипт не смог украсть токен.
Реальность
100% предотвратить слив нельзя, но комбинация мер минимизирует ущерб: даже украденный ограниченный токен быстро истекает и мало что может.
Коротко для собеседования
Слив ограниченного токена предотвращают: безопасным хранением (HttpOnly cookie/память, не localStorage), коротким сроком жизни, минимальным scope (наименьшие привилегии — меньше ущерб), HTTPS, SameSite, возможностью отзыва (ротация, чёрный список) и защитой от XSS (CSP, экранирование — главный вектор кражи). Комбинация минимизирует ущерб.