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

Уязвимости и атаки на API

Разработчику Архитектору

Публичный API — граница доверия. Ошибки авторизации и валидации здесь дороже, чем в UI: скрипты бьют тысячи запросов в минуту.

Общая база: безопасность приложений, интеграционная авторизация.


Модель угроз (кратко)

Защита строится на: аутентификация, авторизация на каждый ресурс, валидация входа, лимиты, наблюдаемость.


Каталог угроз

УгрозаСутьПримерМитигация
Broken Access Control / IDORДоступ к чужому объекту по IDGET /orders/999 чужого заказаПроверка владельца в сервисе, не только «есть JWT»
SQL / NoSQL / Command injectionВраждебный ввод в запрос' OR 1=1--Параметризованные запросы, ORM, whitelist
Mass assignmentКлиент прислал лишние поля{"role":"admin"} в профилеDTO, явный allow-list полей
Open Redirect?next=http://evilФишинг с вашим доменомWhitelist URL редиректа
SSRFСервер дергает внутренний URLurl=http://169.254.169.254Блок private IP, исходящий proxy
XSS (через API → HTML)Неэкранированные данные в письме/админкеStored XSSЭкранирование, CSP
CSRFБраузер шлёт cookie без ведомаPOST с чужого сайтаSameSite, anti-CSRF token
Brute forceПеребор паролей / OTPТысячи /loginRate limit, captcha, lockout
DoS / HTTP floodИсчерпание воркеровМедленные POSTRate limit, WAF, body size cap
Slowloris / slow POSTДержит соединения открытымиМедленная отправка телаТаймауты на прокси
Zip bombМаленький архив → гигабайтыРаспаковка без лимитаЛимит размера, streaming scan
Logic bombЗлоупотребление бизнес-правиломБесконечные бонусыИнварианты, аудит, лимиты
MITMПодслушивание каналаПубличный Wi‑FiTLS везде, HSTS
Утечка в ответеStack trace, внутренние ID500 с 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

Алгоритмы: token bucket, sliding window. Ответ: 429 Too Many Requests + заголовок Retry-After.


Заголовки и hardening

Минимальный набор для HTTP API за прокси:

  • Strict-Transport-Security
  • ограничение Content-Type на входе
  • не отдавать лишние заголовки (Server, внутренние версии)

Для браузерных клиентов — CORS и CSP на фронте.


Процесс в команде

  1. Threat modeling на новый endpoint (STRIDE-lite достаточно).
  2. Security-тесты в CI: известные IDOR/SQLi кейсы на staging.
  3. Пентест перед крупным релизом публичного API.
  4. Реагирование: блок токена, откат, post-mortem (наблюдаемость).

Связанные темы


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).