Уязвимости и атаки на API
Публичный API — граница доверия. Ошибки авторизации и валидации здесь дороже, чем в UI: скрипты бьют тысячи запросов в минуту.
Двенадцать практик "с чего начать" — HTTPS, OAuth, rate limit, gateway, валидация и др. — собраны в 12 советов по безопасности API.
Ниже в этой статье — каталог угроз и разбор типичных промахов.
Общая база: безопасность приложений. Интеграционная авторизация и практика Basic, Bearer, mTLS — 8.05.1121, 8.05.134.
Модель угроз
Защита строится на — аутентификация, авторизация на каждый ресурс, валидация входа, лимиты, наблюдаемость. Виды проверок входных данных — Проверка и валидация.
Каталог угроз
| Угроза | Суть | Пример | Митигация |
|---|---|---|---|
| Broken Access Control / IDOR | Доступ к чужому объекту по ID; права из query | GET /orders/999 чужого заказа; GET /admin/users?isAdmin=true | Проверка владельца и роли на сервере, не только "есть JWT" |
| SQL / NoSQL / Command injection | Враждебный ввод в запрос | ' OR 1=1--, blind SLEEP | Типы SQLi; параметры, ORM |
| Mass assignment | Клиент прислал лишние поля | {"role":"admin"} в профиле | DTO, явный allow-list полей |
| Open Redirect | ?next=http://evil | Фишинг с вашим доменом | Whitelist URL редиректа |
| SSRF | Сервер дергает внутренний URL | url=http://169.254.169.254 | Блок private IP, исходящий proxy |
| XSS (через API → HTML) | Неэкранированные данные в письме/админке | Чаще Stored; возможны Reflected и DOM-based | Экранирование, CSP; см. три типа XSS |
| CSRF | Браузер шлёт cookie без ведома | POST с чужого сайта; смена пароля без re-auth | SameSite, anti-CSRF token |
| Brute force | Перебор паролей / OTP | Тысячи /login | Rate limit, captcha, lockout |
| DoS / HTTP flood | Исчерпание воркеров | Медленные POST | Rate limit, WAF, body size cap |
| Slowloris / slow POST | Держит соединения открытыми | Медленная отправка тела | Таймауты на прокси |
| Zip bomb | Маленький архив → гигабайты | Распаковка без лимита | Лимит размера, streaming scan |
| Logic bomb | Злоупотребление бизнес-правилом | Бесконечные бонусы | Инварианты, аудит, лимиты |
| MITM | Подслушивание канала | Публичный Wi‑Fi | TLS везде, HSTS |
| Утечка в ответе | Stack trace, внутренние ID | 500 с SQL в теле | Единый error handler |
IDOR — разбор типичного промаха
GET /api/v1/documents/550e8400-e29b-41d4-a716-446655440000
Authorization: Bearer <valid_user_A>
Сервер возвращает документ, если UUID существует, не проверяя, что документ принадлежит user A.
Правильно: SELECT … WHERE id = @id AND owner_id = @currentUser.
Тест: два пользователя, два объекта — ни один не читает чужой ID.
Rate limiting
| Уровень | Где |
|---|---|
| Глобальный | API Gateway, Nginx limit_req |
| По пользователю | Middleware + Redis counter |
| По операции | Строже на /login, /reset-password |
Ответ при превышении: 429 Too Many Requests + по возможности Retry-After и X-RateLimit-*. Поток login → refresh → logout с rate limit на входе — аутентификация.
Token bucket — когда допустим кратковременный burst (мобильное приложение, пачка параллельных GET). Leaky bucket или очередь с фиксированной скоростью обработки — когда нужно защитить БД или внешний API от волны одновременных запросов. Sliding window (журнал или счётчик) — когда важна точность лимита "за последние N секунд" без провала на стыке минутных окон.
Разбор всех пяти алгоритмов (fixed window, sliding window log/counter, token bucket, leaky bucket) — §10 "12 концепций". Реализация счётчика в Redis — ZSET + Lua.
Заголовки и hardening
Минимальный набор для HTTP API за прокси:
Strict-Transport-Security- ограничение
Content-Typeна входе - не отдавать лишние заголовки (
Server, внутренние версии)
Для браузерных клиентов — CORS и CSP на фронте.
Процесс в команде
- Threat modeling на новый endpoint (STRIDE-lite достаточно).
- Security-тесты в CI: известные IDOR/SQLi кейсы на staging.
- Пентест перед крупным релизом публичного API.
- Реагирование — блок токена, откат, post-mortem (наблюдаемость).
Связанные темы
- 12 советов по безопасности API — профилактика и чек-лист для ревью
- Zero Trust
- Проектирование API
- Компетенции бэкенда
Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.
Дополнение — практический минимум API hardening
Контроль доступа
- Проверять права на уровне бизнес-объекта, а не только валидность токена.
- Разделять роли чтения и изменения данных.
- Ограничивать scope токенов под конкретные операции.
Безопасность запросов и ответов
- Жёстко валидировать входные схемы.
- Ограничивать размер тела запроса и глубину JSON.
- Возвращать безопасные ошибки без внутренних деталей.
Наблюдаемость
- Логировать неуспешные попытки доступа и аномальные паттерны.
- Выделять отдельные алерты для brute force и скачков 4xx/5xx.
- Хранить correlation-id для трассировки цепочки запросов.