Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Минимизирует риск атак на уровне содержимого, позволяя задавать ограничения на различные структуры 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>
| По умолчанию: | Если вы не укажете этот элемент или укажете отрицательное целое число, система не будет применять ограничение. |
| Присутствие: | Необязательный |
| Тип: | Целое число |
<Исходный> элемент
Сообщение, которое необходимо проверить на наличие атак с использованием 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, чтобы вызвать сбой в работе сервиса и спровоцировать атаки типа «отказ в обслуживании» на уровне приложения. Все настройки являются необязательными и должны быть оптимизированы для защиты ваших сервисных требований от потенциальных уязвимостей.