Перейти к содержимому

1. Введение в Auth & Security

Аутентификация (Authentication) — это процесс проверки личности пользователя: “Ты тот, кем себя называешь?”

Авторизация (Authorization) — это проверка прав: “Ты можешь это делать?”

Разница важна:

  • Аутентификация: логин/пароль, токен, биометрия
  • Авторизация: роли, права, разрешения

Нарушения безопасности = катастрофа:

  • Финансовые потери: штрафы GDPR до 4% от оборота компании
  • Репутационный ущерб: пользователи уходят после утечки данных
  • Юридическая ответственность: суды, иски, регуляторы
  • Технический ущерб: потеря данных, заражение систем
  • 80% взломов связаны со слабыми или украденными паролями
  • Средняя стоимость утечки данных: $4.45 млн (IBM, 2023)
  • 43% атак нацелены на малый бизнес
  • XSS уязвимости присутствуют в 40% веб-приложений

Пользователи используют “123456”, “password”, дни рождения. Решение: хэширование + требования к сложности.

Злоумышленник крадёт cookie сессии и выдаёт себя за пользователя. Решение: HTTPS, HttpOnly, Secure флаги.

Внедрение вредоносного JavaScript на страницу сайта. Решение: экранирование, CSP.

Принуждение браузера пользователя выполнить нежелательные действия. Решение: CSRF токены, SameSite.

Внедрение SQL-кода через пользовательский ввод. Решение: prepared statements, ORM.

Перехват трафика между клиентом и сервером. Решение: HTTPS/TLS.

Современный веб-проект использует:

Пользователь
↓ (HTTPS)
Frontend (Next.js/React)
↓ (JWT / Session cookie)
Backend API
↓ (Hashed password)
Database
КатегорияИнструмент
Хэширование паролейbcrypt, Argon2
Сессииexpress-session, Redis
JWTjsonwebtoken, jose
OAuthNextAuth.js, Passport.js
2FAspeakeasy, otplib

Несколько слоёв защиты: даже если один взломан — остальные держатся.

Layer 1: HTTPS (шифрование трафика)
Layer 2: Валидация входных данных
Layer 3: Аутентификация пользователя
Layer 4: Авторизация (RBAC/ABAC)
Layer 5: Хэширование чувствительных данных
Layer 6: Мониторинг и аудит

Пользователь получает минимум прав, необходимых для работы.

// Плохо: даём все права
user.role = 'admin';
// Хорошо: конкретные права
user.permissions = ['read:articles', 'write:own-articles'];

При ошибке — запрещай доступ, не разрешай.

// Плохо: при ошибке пропускаем
try {
checkAuth(token);
} catch (e) {
// пропускаем ошибку — опасно!
next();
}
// Хорошо: при ошибке блокируем
try {
await checkAuth(token);
} catch (e) {
return res.status(401).json({ error: 'Unauthorized' });
}
  1. Хэширование паролей — bcrypt, Argon2, salt
  2. Сессии и куки — механизм, флаги безопасности
  3. JWT — структура, создание, верификация
  4. JWT vs Sessions — когда что использовать
  5. OAuth 2.0 — flows, grant types
  6. OpenID Connect — поверх OAuth 2.0
  7. NextAuth.js — auth для Next.js приложений
  8. Passport.js — auth middleware для Express
  9. RBAC — ролевой контроль доступа
  10. ABAC — атрибутивный контроль доступа
  11. XSS защита — атаки и противодействие
  12. CSRF защита — атаки и противодействие
  13. HTTPS и Security Headers — конфигурация сервера
  14. Best Practices — финальный чеклист
  1. Найди в публичном GitHub-репозитории хотя бы одну проблему безопасности (слабое хэширование, незащищённый роут)
  2. Проверь свой сайт на https://securityheaders.com
  3. Попробуй XSS на https://xss-game.appspot.com