Безопасность и хранение
Для чего модуль
Научиться принимать решения по безопасности не по мифам, а через модель угроз: какие активы защищаем, от кого защищаем, и какой ценой.
Результат после прохождения
- Вы уверенно различаете AuthN, AuthZ, session management и token lifecycle.
- Вы проектируете хранение токенов с учетом XSS/CSRF-рисков, а не по «популярному совету».
- Вы умеете объяснить и внедрить базовый security baseline для frontend/fullstack продукта.
- Вы знаете, что делать в первый час после security-инцидента.
Термины и аббревиатуры
| Термин | Коротко |
|---|---|
AuthN | Проверка личности |
AuthZ | Проверка прав |
JWT | Подписанный токен |
BFF | Backend for Frontend |
XSS | Внедрение скрипта |
CSRF | Подделка запроса |
Фокус по грейдам
Junior: понимать базовые механики и объяснять их простыми примерами.Middle: применять тему в продуктовых сценариях с учетом рисков и ограничений.Senior: управлять архитектурными trade-offs, метриками и эволюцией решения.
Как работать с модулем
- Каждый урок проходите через призму одного продукта (например, личный кабинет, админка, B2C SPA).
- На каждую тему фиксируйте: решение, какой риск закрывает, какие новые риски создает.
- После каждого урока обновляйте threat model и checklist релиза.
Программа модуля
Урок 1. Auth-модели
Цель: выбирать auth-подход не по тренду, а по требованиям продукта и рискам.
Что нужно различать
- AuthN: кто пользователь.
- AuthZ: что ему разрешено.
- Session management: как долго и где живет авторизованное состояние.
Session vs JWT vs BFF
Session (stateful):
- Плюсы: централизованная инвалидция, проще revoke.
- Минусы: хранение сессионного состояния на сервере/в кэше.
JWT (часто stateless):
- Плюсы: масштабирование без общего session store.
- Минусы: revoke сложнее, ошибки в lifecycle токенов стоят дорого.
BFF:
- Плюсы: токены скрыты от браузера, лучше контроль boundary.
- Минусы: добавляется отдельный слой и операционная сложность.
Access/Refresh lifecycle
Базовая схема:
- Короткоживущий
access token. - Долгоживущий
refresh tokenс ротацией. - Явные правила revoke при logout, compromise, смене пароля.
Cookie-атрибуты
HttpOnly: JS не читает cookie.Secure: только HTTPS.SameSite: базовая защита от CSRF для cookie-сценариев.
Set-Cookie: refresh_token=...; HttpOnly; Secure; SameSite=Lax; Path=/auth/refresh
Где ломается в проде
- Нет централизованной стратегии revoke.
- Access token живет слишком долго «ради удобства».
- Logout удаляет только UI-state, но не серверную сессию.
Мини-задача (обязательная)
Сравните два сценария: SPA без BFF и SPA + BFF. Для каждого опишите: где хранится auth state, как делается refresh, как выполняется logout/revoke.
Что спросит интервьюер: когда cookie-based подход безопаснее, а когда удобнее токены в header.
Критерий готовности по уроку: вы можете выбрать auth-модель под конкретный продукт и защитить выбор через риски и эксплуатационные ограничения.
Урок 2. Хранение и клиентская безопасность
Цель: понимать, где и почему происходят утечки токенов на клиенте.
Storage options и риски
localStorage:
- Удобен для чтения из JS.
- Уязвим при XSS: украсть токен просто.
sessionStorage:
- Живет в пределах вкладки.
- Проблема XSS остается.
HttpOnly cookie:
- JS не читает токен.
- Требует правильной защиты от CSRF.
XSS как главный практический риск
Если в приложении XSS, злоумышленник может:
- Читать токены из JS-доступного хранилища.
- Вызывать API от лица пользователя.
- Экспортировать чувствительные данные.
Минимальный baseline:
- Не рендерить непроверенный HTML.
- CSP + безопасные шаблоны рендера.
- Никаких секретов в client bundle и console logs.
Data minimization и логирование
- Не логируйте токены, session id, PII в открытом виде.
- Маскируйте чувствительные поля.
- В error-логах храните
traceId, но не секреты.