Опишите реальные операции API
Составьте перечень маршрутов и действий: вход, список записей, чтение объекта, изменение, экспорт, загрузка файла, генерация, административная операция. Для каждого укажите, кто обращается — браузер, мобильное приложение, другой сервер или задача по расписанию. Даже один маршрут GraphQL может выполнять много разных операций.
Учебный пример — API бронирования переговорных. Запрос списка свободных комнат можно сделать публичным, а данные чужого бронирования и отмену — ограничить. Решение принимается по смыслу операции, а не по тому, известен ли адрес API постороннему человеку.
| Операция | Что фиксировать в правилах |
|---|---|
| Прочитать или изменить объект | Пользователь, организация, конкретный объект и разрешённое действие. |
| Получить список или экспорт | Границы выборки, допустимые поля и максимальный объём. |
| Запустить платную задачу | Право, квота, стоимость, повтор и незавершённые задания. |
| Выполнить админскую функцию | Отдельное полномочие и журнал результата. |
BOLA и IDOR: вход не равен доступу к каждому объекту
BOLA — ошибка проверки прав на объект; IDOR часто используют для описания доступа через подменённый идентификатор. OWASP рекомендует проверять право выполнить действие над объектом при каждом таком обращении. Непредсказуемые идентификаторы полезны, но не отменяют авторизацию.
В нашей тестовой системе сотрудник А создал бронирование. Вошедший сотрудник Б из другой организации не должен прочитать его через карточку, выгрузку или вложенный список. Проверка только одного обработчика оставляет остальные пути без гарантии. Для списка ограничивается сама выборка, для изменения — ещё и набор разрешённых полей.
- Создайте два собственных тестовых аккаунта и объекты в разных организациях.
- Опишите разрешённые операции владельца, коллеги, чужого пользователя и администратора.
- Проверьте каждый путь чтения и изменения на соответствие матрице прав.
- Убедитесь, что отклонённый запрос не изменил данные и не выполнил побочное действие.
- Сохраните найденный сценарий как проверку, которую выполняете после изменений доступа.
Подробнее в первоисточнике: 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 — дополнительный фильтр запросов, а не источник бизнес-прав.