Контроль доступа — самая частая уязвимость. Проверка владения ресурсом на сервере в каждом запросе (лучше в выборке из базы), модель запрета по умолчанию, централизованные политики для ролей. 401 — не аутентифицирован, 403 — нет прав (а для чужих ресурсов часто 404).
Аутентификация: пароли — argon2id или bcrypt с солью; короткоживущие access-токены и отзываемые refresh; фиксированный алгоритм подписи; ограничение попыток входа и защита от перебора (задержки, капча); двухфакторная аутентификация; безопасное восстановление пароля (одноразовые токены с коротким сроком).
Ввод и транспорт: параметризованные запросы против инъекций; валидация схемы и размера тела; ограничение частоты по ключу и IP; только HTTPS, HSTS; внутри периметра — mTLS; CORS только для своих источников; защита cookie: HttpOnly, Secure, SameSite.
Что отдаём: ошибки без стектрейсов и SQL — код и correlation id; одинаковый ответ на «нет пользователя» и «неверный пароль»; не отдавать лишние поля (массовое присвоение и раскрытие данных — явные DTO).
Эксплуатация: секреты в менеджере с ротацией; проверка зависимостей в сборке; журналирование событий безопасности (входы, смены пароля, отказы доступа) и алерты на аномалии; регулярные тесты на проникновение.