Правило JSONThreatProtection

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Что

Позволяет снизить риск атак на уровне контента, задавая ограничения для различных структур JSON, таких как массивы и строки.

.

Видео. Посмотрите короткое видео о том, как правила JSONThreatProtection помогают защитить API от атак на уровне контента.

Видео. Посмотрите короткое видео о межоблачной платформе API Apigee.

Сведения об элементах

В справочнике по элементам описаны элементы и атрибуты правила JSONThreatProtection.

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
   <DisplayName>JSONThreatProtection 1</DisplayName>
   <ArrayElementCount>20</ArrayElementCount>
   <ContainerDepth>10</ContainerDepth>
   <ObjectEntryCount>15</ObjectEntryCount>
   <ObjectEntryNameLength>50</ObjectEntryNameLength>
   <Source>request</Source>
   <StringValueLength>500</StringValueLength>
</JSONThreatProtection>

Атрибуты <JSONThreatProtection>

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> 

В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:

Атрибут Описание По умолчанию Присутствие
name

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы отключить политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

Элемент <ArrayElementCount>

Указывает максимальное количество элементов, разрешенных в массиве.

<ArrayElementCount>20</ArrayElementCount>
По умолчанию: Если вы не укажете этот элемент или зададите отрицательное целое число, система не будет применять ограничение.
Присутствие Необязательно
Тип: Целое число

Элемент <ContainerDepth>

Указывает максимально допустимую глубину вложенности, где контейнерами являются объекты или массивы. Например, если массив содержит объект, который содержит объект, глубина вложенности будет равна 3.

<ContainerDepth>10</ContainerDepth>
По умолчанию: Если вы не укажете этот элемент или зададите отрицательное целое число, система не будет применять никаких ограничений.
Присутствие Необязательно
Тип: Целое число

Элемент <ObjectEntryCount>

Указывает максимальное количество записей, разрешенное в объекте.

<ObjectEntryCount>15</ObjectEntryCount>
По умолчанию: Если вы не укажете этот элемент или зададите отрицательное целое число, система не будет применять никаких ограничений.
Присутствие Необязательно
Тип: Целое число

Элемент <ObjectEntryNameLength>

Указывает максимальную длину строки, допустимую для названия свойства в объекте.

<ObjectEntryNameLength>50</ObjectEntryNameLength>
По умолчанию: Если вы не укажете этот элемент или зададите отрицательное целое число, система не будет применять ограничение.
Присутствие Необязательно
Тип: Целое число

Элемент <Source>

Сообщение, которое нужно проверить на наличие атак с использованием полезной нагрузки JSON. Чаще всего используется значение request, поскольку обычно требуется проверять входящие запросы от клиентских приложений. Если задано значение message, этот элемент автоматически оценивает сообщение запроса, когда прикреплен к потоку запроса, и сообщение ответа, когда прикреплен к потоку ответа.

<Source>request</Source>
По умолчанию: запрос
Присутствие Необязательно
Тип:

Строка.

Допустимые значения: request, response или message.

Элемент <StringValueLength>

Указывает максимальную длину строкового значения.

<StringValueLength>500</StringValueLength>
По умолчанию: Если вы не укажете этот элемент или зададите отрицательное целое число, система не будет применять ограничение.
Присутствие Необязательно
Тип: Целое число

Справочник по ошибкам

.

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникнуть при выполнении политики.

Код неисправности Статус HTTP Причина Исправить
steps.jsonthreatprotection.ExecutionFailed 500 Политика JSONThreatProtection может вызывать множество различных типов ошибок ExecutionFailed. Большинство этих ошибок возникает при превышении определенного порога, установленного в политике. К этим типам ошибок относятся: длина имени записи объекта , количество записей объекта , количество элементов массива , глубина контейнера , длина строкового значения . Эта ошибка также возникает, когда полезные данные содержат недопустимый объект JSON .
steps.jsonthreatprotection.SourceUnavailable 500 Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> , имеет одно из следующих значений:
  • Вне области действия (недоступно в конкретном потоке, в котором выполняется политика)
  • Не является одним из допустимых значений request , response или message
steps.jsonthreatprotection.NonMessageVariable 500 Эта ошибка возникает, если для элемента <Source> установлена ​​переменная, которая не имеет типа message .

Ошибки развертывания

Никто.

Переменные неисправности

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

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "SourceUnavailable"
jsonattack. policy_name .failed policy_name — указанное пользователем имя политики, вызвавшей ошибку. jsonattack.JTP-SecureRequest.failed = true

Пример ответа об ошибке

{
  "fault": {
    "faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
    }
  }
}

Пример правила неисправности

<FaultRule name="JSONThreatProtection Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ExecutionFailed") </Condition>
    </Step>
    <Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>

Схемы

Примечания

Как и сервисы на основе XML, API, поддерживающие нотацию объектов JavaScript (JSON), уязвимы для атак на уровне контента. Простые атаки JSON пытаются использовать структуры, которые перегружают парсеры JSON, чтобы вызвать сбой сервиса и спровоцировать атаки типа "отказ в обслуживании" на уровне приложений. Все настройки являются необязательными и должны быть оптимизированы с учетом требований к сервису и потенциальных уязвимостей.

Статьи по теме

Правило JSONtoXML

Правило XMLThreatProtection

Правила RegularExpressionProtection