INTEGRITY Документация

Schema validation

Схема API определяет, какие запросы API считаются допустимыми, на основе ряда свойств запроса, таких как целевая конечная точка, формат пути или переменных запроса и метод HTTP.

Schema Validation сравнивает входящие запросы с загруженной схемой OpenAPI. Загруженная схема задаёт ожидаемую структуру запроса для Schema Profile.

После того как загруженный профиль станет доступен, Cloudflare создаёт постоянное обнаружение. Используйте cf.schema_validation.uploaded.violated чтобы анализировать нарушения и противодействовать им.

Само по себе обнаружение не блокирует трафик. Просмотрите результаты в разделе Анализ профиля перед применение профиля с помощью Custom Rules.

Schema Validation 2.0 является текущей версией. Справочные материалы по предыдущей версии см. в Настройка Classic Schema Validation.

Настройка загруженной схемы

Конечные точки должны существовать как операции в Web Assets > Операции. При загрузке через дашборд операции схемы добавляются автоматически.

При использовании API или Terraform добавляйте операции схемы по отдельности. Подробнее об автоматизации см. в Настройка API или Terraform.

Загрузить схему

  1. На панели управления Cloudflare перейдите к разделу Web Assets страницу.

    Перейдите в Web assets ↗
  2. Перейдите в Schema validation на вкладке.

  3. Выберите Добавление проверки.

  4. Загрузите файл схемы OpenAPI.

  5. Выберите Добавление схемы и конечных точек.

Применение изменений может занять несколько минут в зависимости от количества операций.

Управление загруженными схемами

  1. На панели управления Cloudflare перейдите к разделу Web Assets страницу.

    Перейдите в Web assets ↗
  2. Перейдите в Schema validation на вкладке.

  3. Выберите Настройки схемы.

  4. Фильтр по Злоупотребление API.

  5. В разделе Schema validation > Активные схемы, проверьте загруженные схемы.

  6. В контекстном меню схемы скачайте её или удалите.

При удалении загруженной схемы прекращается оценка её профиля. Связанные операции остаются в инвентаре Web Assets.

Добавление резервного правила

Правило fallthrough соответствует запросам, которые не совпадают ни с одной известной операцией. Используйте это пользовательское правило WAF для защиты от неопознанных конечных точек.

  1. На панели управления Cloudflare перейдите к разделу Правила безопасности страницу.

    Перейдите в Правила безопасности ↗
  2. Выберите Шаблоны.

  3. Найдите Mitigate API requests to unidentified endpoints и выберите Предпросмотр шаблона.

  4. Введите понятное название правила.

  5. Выберите нужные хосты и действие правила.

  6. Выберите Сохранить как черновик или Развернуть.

Для пользовательской логики используйте cf.api_gateway.fallthrough_detected. Ограничьте область действия правила хостнеймом вашего API или корневым путём.


Спецификации

В настоящее время Cloudflare принимает только Схемы OpenAPI v3 ↗. Допустимые форматы файлов: YAML (.yml или .yaml расширение файла) и JSON (.json расширение файла).

Схемы OpenAPI, созданные разными инструментами, порой недостаточно точны для импорта в Schema validation. В этом случае используйте стороннее средство, например Swagger Editor ↗ чтобы убедиться, что схемы соответствуют спецификации OpenAPI.


Ограничения

Schema validation (импорт) в составе Cloudflare API Shield и Schema learning (экспорта) возможности зависят от OpenAPI Specification (OAS) v3.0 ↗.

Поддержка распространяется на все patch-версии, например OAS v3.0.x. OAS v3.1 не поддерживается, и расширять поддержку до OpenAPI 2.0 не планируется.

На данный момент API Shield не поддерживает некоторые возможности схем API, в том числе: все ответы, внешние ссылки, нетривиальное шаблонирование путей и уникальные элементы.

Существует ограничение в 10 000 операций для включённых схем для клиентов с планом Enterprise, подписанных на API Shield. Чтобы увеличить этот лимит, обратитесь к своей команде по работе с аккаунтом.

Размер тела запроса для проверки

Schema Validation проверяет тело запроса до максимального размера, установленного для тарифного плана. Запросы, превышающие этот лимит, не проверяются по загруженной схеме.

Ограничения по умолчанию на размер тела запроса:

План Ограничение размера тела запроса по умолчанию
Free 1 КБ
Pro 8 KB
Business 8 KB
Enterprise 128 КБ

Выявление запросов, превышающих лимит размера тела запроса

Используйте журналы запросов, чтобы сравнить размер тела запроса с лимитом вашего тарифного плана.

Сведения об ограничениях для клиентов на тарифах Free, Pro, Business или Enterprise без подписки на API Shield см. в Планы.

Обязательные поля

Хотя спецификация OpenAPI не требует этого строго, для Schema validation эти поля обязательны.

schema

parameter

Примечания о проверяемых и поддерживаемых полях

Подробные сведения о том, какие объекты и поля спецификации OpenAPI (OAS) поддерживает Schema validation в настоящее время, приведены ниже.

servers

parameter

reference

requestBody

parameter/schema

schema


Проверка тела запроса

API Shield умеет распознавать спецификации тела запроса, содержащиеся в загруженных схемах, и проверять, соответствуют ли им данные входящих запросов к API.

Schema validation в настоящее время поддерживает проверку запросов с content-type application/json.

В спецификации OpenAPI схемы тела запроса связаны с media-range (например, application/*, application/xml или application/json).

Когда Cloudflare проверяет входящие запросы, она проверяет, что у запроса content-type соответствует диапазону media-range, указанному в OpenAPI.

Например, когда файл OpenAPI указывает application/* как часть карты содержимого тела запроса, Cloudflare будет принимать запросы с типами содержимого application/xml и application/json. Однако только application/json тела запросов будут проверяться по предоставленной схеме.

Cloudflare рекомендует делать media-ranges как можно более узкими, указывая отдельный media-type. Если конечной точке API нужно поддерживать несколько content-type, можно использовать media-ranges с подстановочными знаками.

Также стоит проявить осторожность, если origin-сервер настроен на выполнение MIME-сниффинг ↗. Например, если запрос с телом JSON намеренно содержит application/malicious content-type, и Cloudflare был настроен на разрешение application/* media-range, запрос будет передан источнику без проверки содержимого тела JSON. Однако источник, который игнорирует content-type и либо пробует десериализовать данные, либо определяет MIME-тип самостоятельно, может десериализовать тело JSON, ошибочно предположив, что проверка тела по схеме была пройдена.

Поэтому если вам нужно поддерживать application/json и application/xml на той же конечной точке, вы можете использовать application/*. Cloudflare будет проверять предоставленную схему для тел запросов, у которых content-type задан как application/json. Запросы с content-type application/xml (и другие, соответствующие application/*) будут пропущены. Тем не менее настоятельно рекомендуется отключить определение типа содержимого (content-type sniffing) на исходном сервере.

Cloudflare позволяет указывать следующие media-ranges в карте содержимого тела запроса OpenAPI:

Диапазоны media-range также можно настроить для применения charset параметр. Для этого Cloudflare принимает только charset параметр со статическим значением utf-8 как часть спецификации media-range, и при соответствующей настройке мы также будем требовать, чтобы content-type запроса содержал этот charset.


Устранение неполадок

В этом разделе рассматриваются типичные проблемы, с которыми вы можете столкнуться при использовании проверки схемы.

Устраните OneOf нарушение ограничения

A OneOf ошибка ограничения означает, что запрос не соответствует загруженному профилю. Его тело не совпало ровно с одним oneOf ↗ опцию.

Запрос был недействителен по одной из двух причин:

Чтобы устранить проблему, сравните пример запроса с определением схемы. Возможно, в запросе отсутствуют обязательные поля или указаны несовместимые типы.


Доступность

Клиенты с API Security уже имеют доступ к Schema Profiles через Schema Learning и Schema Validation. Cloudflare открывает закрытый бета-тест для приглашённых клиентов с тарифным планом Enterprise без API Security. Заинтересованные клиенты могут обратиться в свой account team, чтобы заявить об интересе. Доступ к закрытой бете не гарантирует доступность в будущих тарифных планах и не определяет их стоимость.