OWASP Top 10 для API

↑ 7.4 Безопасность бэкенда · → Следующая

Желательно~3 мин чтенияУровень: senior

Зачем это на собесе

Стандартный вопрос: «какие уязвимости API вы знаете и как от них защищаетесь».

Объяснение

OWASP API Security Top 10 (редакция 2023):

#РискЗащита
API1Broken Object Level Authorization (BOLA/IDOR)проверка доступа к каждому объекту по владельцу
API2Broken Authenticationстойкие пароли, MFA, короткие токены, защита от перебора
API3Broken Object Property Level Authorizationне отдавать и не принимать лишние поля (DTO, allowlist)
API4Unrestricted Resource Consumptionлимиты запросов, размеров, пагинации, таймауты
API5Broken Function Level Authorizationпроверка ролей/политик на функциях (админские методы)
API6Unrestricted Access to Sensitive Business Flowsзащита сценариев (покупка, регистрация) от автоматизации
API7Server Side Request Forgery (SSRF)allowlist адресов, запрет внутренних сетей, отдельная сеть
API8Security Misconfigurationбезопасные настройки, отключённые отладочные возможности, актуальные заголовки
API9Improper Inventory Managementреестр всех API и версий, вывод старых из эксплуатации
API10Unsafe Consumption of APIsпроверка данных от сторонних API как недоверенных
// BOLA: проверка владельца на уровне запроса
var order = await db.Orders.FirstOrDefaultAsync(o => o.Id == id && o.OwnerId == user.Id, ct);
return order is null ? Results.NotFound() : Results.Ok(order.ToDto());

Практики: единая авторизация как политика по умолчанию (deny by default), security-заголовки (HSTS, X-Content-Type-Options), CORS с allowlist, логирование попыток доступа, зависимости на сканировании (SCA), SAST/DAST в CI.

Нюансы и подводные камни

  • Самая частая проблема — BOLA: авторизацию проверяют только на уровне роли.
  • Mass assignment: биндинг тела в сущность.
  • Обход через смену метода/версии API/пути.
  • Информация в ошибках (стек, SQL) помогает атакующему.
  • Безопасность нельзя добавить в конце: моделирование угроз на проектировании.

Практика

  1. Проверьте свои эндпоинты на BOLA: запросите чужой ресурс.
  2. Добавьте лимиты и максимальные размеры запросов.
  3. Включите dependency scanning (dotnet list package --vulnerable).

Вопросы с ответами

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