Вы просматриваете документацию по 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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент <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 . | build |
steps.jsonthreatprotection.SourceUnavailable | 500 | Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> , имеет одно из следующих значений:
| build |
steps.jsonthreatprotection.NonMessageVariable | 500 | Эта ошибка возникает, если для элемента <Source> установлена переменная, которая не имеет типа message . | build |
Ошибки развертывания
Никто.
Переменные неисправности
Эти переменные устанавливаются, когда эта политика вызывает ошибку. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
| Переменные | Где | Пример |
|---|---|---|
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, чтобы вызвать сбой сервиса и спровоцировать атаки типа "отказ в обслуживании" на уровне приложений. Все настройки являются необязательными и должны быть оптимизированы с учетом требований к сервису и потенциальных уязвимостей.