roboguard

Как защитить API приложения: права, данные и нагрузка

API остаётся входом в приложение, даже если пользователь видит только красивый экран или Telegram Mini App. Для каждого запроса сервер должен определить клиента, разрешённое действие и допустимый расход ресурсов. Защита HTTP-трафика дополняет эти проверки.

Опишите реальные операции API

Составьте перечень маршрутов и действий: вход, список записей, чтение объекта, изменение, экспорт, загрузка файла, генерация, административная операция. Для каждого укажите, кто обращается — браузер, мобильное приложение, другой сервер или задача по расписанию. Даже один маршрут GraphQL может выполнять много разных операций.

Учебный пример — API бронирования переговорных. Запрос списка свободных комнат можно сделать публичным, а данные чужого бронирования и отмену — ограничить. Решение принимается по смыслу операции, а не по тому, известен ли адрес API постороннему человеку.

ОперацияЧто фиксировать в правилах
Прочитать или изменить объектПользователь, организация, конкретный объект и разрешённое действие.
Получить список или экспортГраницы выборки, допустимые поля и максимальный объём.
Запустить платную задачуПраво, квота, стоимость, повтор и незавершённые задания.
Выполнить админскую функциюОтдельное полномочие и журнал результата.

BOLA и IDOR: вход не равен доступу к каждому объекту

BOLA — ошибка проверки прав на объект; IDOR часто используют для описания доступа через подменённый идентификатор. OWASP рекомендует проверять право выполнить действие над объектом при каждом таком обращении. Непредсказуемые идентификаторы полезны, но не отменяют авторизацию.

В нашей тестовой системе сотрудник А создал бронирование. Вошедший сотрудник Б из другой организации не должен прочитать его через карточку, выгрузку или вложенный список. Проверка только одного обработчика оставляет остальные пути без гарантии. Для списка ограничивается сама выборка, для изменения — ещё и набор разрешённых полей.

  1. Создайте два собственных тестовых аккаунта и объекты в разных организациях.
  2. Опишите разрешённые операции владельца, коллеги, чужого пользователя и администратора.
  3. Проверьте каждый путь чтения и изменения на соответствие матрице прав.
  4. Убедитесь, что отклонённый запрос не изменил данные и не выполнил побочное действие.
  5. Сохраните найденный сценарий как проверку, которую выполняете после изменений доступа.

Подробнее в первоисточнике: OWASP API1: доступ к чужим объектам; OWASP: проверка прав при каждом запросе.

Ключ, JWT и CORS решают разные задачи

Ключ приложения может идентифицировать интеграцию, а пользовательская сессия — человека. Затем всё равно требуется проверка его полномочий. Декодированное содержимое JWT ещё не подтверждает подлинность токена: проверку выполняет сервер с ожидаемыми параметрами и правилами срока действия. Используйте поддерживаемую библиотеку и документацию выбранной схемы входа.

CORS управляет тем, какие браузерные источники могут читать ответы при межсайтовых запросах. Это не универсальная авторизация API: небраузерный клиент не получает ваши бизнес-права из настройки CORS. Не переносите проверку владельца в браузер и не используйте заголовок Origin как единственное доказательство личности.

Подробнее в первоисточнике: OWASP: безопасность REST API.

Лимитируйте действие, а не только число запросов

Сто лёгких запросов и одна большая выгрузка могут потреблять разные ресурсы. OWASP отдельно выделяет отсутствие ограничений ресурсов: размер загрузки, длительность работы, объём ответа, пакетные действия и расходы интеграций. Общий предел запросов стоит дополнять ограничениями того, что приложение делает после допуска.

Для сервиса генерации введите понятие задания: кто его запустил, сколько таких заданий выполняется и что считается повтором. Квота пользователя не должна зависеть только от IP — несколько клиентов могут работать из одной сети, а один клиент менять адреса. Для вебхука выбирайте предел с учётом ожидаемых повторов поставщика.

МаршрутПример меры в приложенииЧто проверить
ЭкспортПредел объёма и числа параллельных задачОбычный экспорт проходит; превышение даёт понятный отказ.
ГенерацияКвота владельца и ограничение незавершённых заданийПовтор одного запроса не создаёт дополнительные расходы.
ЗагрузкаМаксимальный размер и допустимые форматыЛимит действует до дорогостоящей обработки.
SMSОграничения попыток и отправок по назначениюПовторная попытка не расходует баланс без предусмотренного допуска.

Подробнее в первоисточнике: OWASP API4: расход ресурсов и платных интеграций.

Подключите WAF и контроль нагрузки к нужному домену

HTTP API на собственном домене можно направить через RoboGuard при совместимой конфигурации маршрута, TLS и origin. WAF разбирает поддерживаемые признаки запроса, а правила трафика ограничивают нежелательные обращения. Начинайте с реальных методов, форматов и размеров тела своего API; проверяйте причины срабатываний и нормальные запросы.

Серверный клиент не должен получать HTML-страницу проверки вместо ожидаемого ответа API. Не применяйте ко всем маршрутам правила, рассчитанные на браузер. Для машинных интеграций нужны совместимые действия и точные исключения; исключение не должно открывать весь домен. Закрытый прямой путь к origin помогает не обходить этот слой.

WAF не знает автоматически, кому принадлежит бронь или файл, и не заменяет серверную авторизацию. Он также не ограничивает вызовы к чужому API, которые обходят ваш домен. Гарантию защиты каждого маршрута нельзя вывести из одного успешного запроса главной страницы.

Проверьте результат с точки зрения клиента

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

Смотрите отдельно на ответы приложения и решения защиты. Много блокировок само по себе не означает хороший результат: важнее, что разрешённый пользователь завершил операцию, запрещённое действие не выполнено, а сервер не тратит ресурсы сверх заданных правил.

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

Можно ли защитить API без обычного сайта?

Да, если у API есть подходящий публичный HTTP(S)-домен и его трафик можно направить через RoboGuard. Перед подключением проверяют клиентов, методы, тела запросов и правила без обязательной браузерной проверки.

WAF исправит IDOR или BOLA?

Нет. Право пользователя на конкретный объект должен проверять сервер приложения. WAF — дополнительный фильтр запросов, а не источник бизнес-прав.

Защитите публичный HTTP-вход приложения

У вас есть собственный домен API, приложения или webhook? Проверьте требования к DNS и серверу. RoboGuard фильтрует запросы, которые проходят через подключённый домен; права пользователей и бизнес-правила остаются в вашем приложении.

Как подключить приложение