Про безопасность WEB-приложений
Сегодня разложим по полочкам аутентификацию и авторизацию: от старых добрых cookie-сессий до FIDO2-ключей. Будет много примеров, анти-паттернов и практических приёмов.
🔑 Зачем вообще делить на "AuthN" и "AuthZ"?
Ошибка в любой из двух стадий = плохой исход. Например, если пользователь "гость" без проблем вызывает /admin, это провал AuthZ, даже если AuthN прошёл честно.
🧩 Классические схемы + подводные камни
🛠️ Подход и Уязвимости
- Cookie-Session - CSRF, XSS, Session Fixation
 - Basic/Digest - Перехват без TLS, Brute Force
 - API-Key - Утечки в логи/Git, нет ротации
 
👉 Уточнение: Session Fixation часто ловят SPA-приложения, где frontend берёт сессию "как есть", не обновляя после логина. Меняйте session_id сразу после успешной аутентификации!
🪙 Токеновые бойцы
💳 Метод и 🕳️ Риски
- JWT - "alg":"none», XSS → кража из localStorage
 - OAuth 2.0 - Неправильный redirect_uri, Implicit Flow leaks
 - OpenID Connect - Подделка id_token, слабый nonce
 - SAML 2.0 - XML Signature Wrapping, XXE
 - Magic Link - Перехват email, повторное использование
 
💡 Пояснение: длинный TTL в JWT = "чек в белый список". Нужно только сократить до 15-30 минут и использовать Refresh-токены с чёткой ротацией.
🛡️ Крипто-уровень и 2FA
- mTLS — сервер и клиент проверяют сертификаты друг друга.
 - Kerberos — тикеты, популярно в AD-сетях.
 - FIDO2/WebAuthn — биометрия + TPM, «паролей нет».
 - TOTP/HOTP — 6-значные коды, знакомые по Google Authenticator.
 
🐞 Топ-атаки вне зависимости от метода
- Brute Force / Password Spraying — массовый подбор слабых
 - Credential Stuffing — используем слитые базы (SQL-injection
 - Replay Attack — повторяем старый легальный запрос, если нет
 - Insecure Storage — токен в localStorage? XSS
 - CORS Misconfig — 
Access-Control-Allow-Origin: *🤦♂️. 
🚦 Практические анти-паттерны (и как их чинить)
😬 Анти-паттерн и ✅ Решение
- UID в JWT без подписи - Подписывай и верифицируй ключом, хранящимся вне Git
 - Cookie без SameSite - SameSite=Strict (минимум Lax) + CSRF-токены
 - Токен в URL -Передавай в заголовке Authorization
 - Отсутствие ротации API-ключей - TTL + автоматическая регенерация
 
🔧 Мини-чек-лист перед релизом
- HTTPS Only + HSTS - Argon2/bcrypt + соль ≥16 B
 - Rate-limit на /login - 2FA для админов
 - CSP + X-Frame-Options - Логирование подозрительных IP
 
🚀Реальный кейс: как мы «убили» сессию-фиксацию
В одном проекте юзер логинился, получал ту же сессию что и до логина. Атакующий мог зафиксировать ID до аутентификации, затем дождаться входа жертвы и… получить авторизацию.
Результат — отчёты Pentest’а стали скучнее, клиенты спокойнее 😊.
💬 Что дальше?
- Прототипируешь — начни с JWT + Refresh + SameSite cookie.
 - Идёшь в энтерпрайз — присмотрись к SAML или OIDC.
 - Хочешь «без паролей» — внедряй FIDO2 для core-пользователей.
 
И помни: нет серебряной пули. Комбинируй механизмы, минимизируй права, мониторь логи, и пусть прод живёт долго и счастливо! 🔥
До встречи в следующих постах! Если остались вопросы — пиши в комментарии, обсудим 👇