Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Устраняйте уязвимости XML и минимизируйте количество атак на API. При необходимости можно настроить обнаружение атак с использованием полезной нагрузки XML на основе заданных ограничений. Защититесь от угроз XML, используя следующие подходы:
.- Проверка сообщений на соответствие схеме XML (
.xsd) - Оценивать содержимое писем на наличие определенных ключевых слов или шаблонов, чтобы исключить их.
- Обнаруживать поврежденные или неправильно сформированные письма до их обработки.
Сведения об элементах
В справочнике по элементам описаны элементы и атрибуты правила XMLThreatProtection.
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1"> <DisplayName>XML Threat Protection 1</DisplayName> <NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits> <Source>request</Source> <StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits> <ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits> </XMLThreatProtection>
Атрибуты <XMLThreatProtection>
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1">
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент <NameLimits>
Указывает ограничения на количество символов, которые должны проверяться и применяться правилом.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| По умолчанию: | Н/Д |
| Присутствие | Необязательно |
| Тип: | Н/Д |
Элемент <NameLimits>/<Element>
Указывает ограничение на максимальное количество символов, разрешенное в любом названии элемента в XML-документе.
Например, рассмотрим следующий XML-код:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
При анализе приведенного выше XML-кода значение элемента <Element> в фрагменте правил ниже подтвердит, что названия элементов (book, title, author и year)) не превышают 10 символов.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: | Целое число |
Элемент <NameLimits>/<Attribute>
Указывает ограничение на максимальное количество символов, допустимое в любом названии атрибута в XML-документе.
Например, рассмотрим следующий XML-код:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
При анализе приведенного выше кода XML значение элемента <Attribute> в фрагменте кода ниже подтвердит, что название атрибута category не превышает 10 символов.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: | Целое число |
Элемент <NameLimits>/<NamespacePrefix>
Позволяет задать ограничение на максимальное количество символов, допустимое в префиксе пространства имен в XML-документе.
Например, рассмотрим следующий XML-код:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
При анализе приведенного выше XML-кода значение элемента <NamespacePrefix> в фрагменте правил ниже подтвердит, что префикс пространства имен ns1 не превышает 10 символов.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: | Целое число |
Элемент <NameLimits>/<ProcessingInstructionTarget>
Задает ограничение на максимальное количество символов, разрешенное в целевом элементе любых инструкций по обработке в XML-документе.
Например, рассмотрим следующий XML-код:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
При анализе приведенного выше XML-кода значение элемента <ProcessingInstructionTarget> в фрагменте правил ниже подтвердит, что целевой элемент инструкции по обработке xml-stylesheet не превышает 10 символов.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: | Целое число |
Элемент <Source>
Сообщение, которое нужно отфильтровать на наличие атак с использованием полезной нагрузки XML. Чаще всего используется значение request, поскольку обычно требуется проверять входящие запросы от клиентских приложений.
Если задано значение message, этот элемент автоматически оценивает сообщение запроса, когда прикреплен к потоку запроса, и сообщение ответа, когда прикреплен к потоку ответа.
<Source>request</Source>
| По умолчанию: | запрос |
| Присутствие | Необязательно |
| Тип: |
Строка. Выберите |
Элемент <StructuralLimits>
Указывает структурные ограничения, которые должны проверяться и соблюдаться в соответствии с правилами.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| По умолчанию: | Н/Д |
| Присутствие | Необязательно |
| Тип: | Н/Д |
Элемент <StructuralLimits>/<NodeDepth>
Указывает максимальную глубину узла, допустимую в XML.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Элемент <StructuralLimits>/<AttributeCountPerElement>
Указывает максимальное количество атрибутов, разрешенное для любого элемента.
Например, рассмотрим следующий XML-код:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<AttributeCountPerElement> в фрагменте правил ниже подтвердит, что элементы book, title, author и year содержат не более 2 атрибутов каждый.
Обратите внимание, что атрибуты, используемые для определения пространств имен, не учитываются.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Элемент <StructuralLimits>/<NameSpaceCountPerElement>
Указывает максимальное количество определений пространства имен, разрешенное для любого элемента.
Например, рассмотрим следующий XML-код:
<e1 attr1="val1" attr2="val2">
<e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/>
</e1>При анализе приведенного выше XML-кода значение элемента <NamespaceCountPerElement> в фрагменте правил ниже подтвердит, что элементы e1 и e2 не содержат более 2 определений пространства имен каждый. В этом случае у элемента <e1> нет определений пространства имен, а у элемента <e2> есть два определения: xmlns="http://apigee.com" и xmlns:yahoo="http://yahoo.com".
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Элемент <StructuralLimits>/<ChildCount>
Указывает максимальное количество дочерних элементов, разрешенных для любого элемента.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Атрибуты
| Атрибут | По умолчанию | Тип поля |
|---|---|---|
| includeComment | true | Необязательно |
| includeElement | true | Необязательно |
| includeProcessingInstructions | true | Необязательно |
| includeText | true | Необязательно |
Элемент <ValueLimits>
Указывает ограничения на количество символов в значениях, которые должны проверяться и применяться правилом.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| По умолчанию: | Н/Д |
| Присутствие | Необязательно |
| Тип: |
Н/Д |
Элемент <ValueLimits>/<Text>
Позволяет задать ограничение на количество символов для любых текстовых узлов в XML-документе.
Например, рассмотрим следующий XML-код:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Text> в фрагменте правил ниже подтвердит, что текстовые значения элементов Learning XML, Erik T.
Ray, и 2003 не превышают 15 символов каждое.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Элемент <ValueLimits>/<Attribute>
Позволяет указать максимальное количество символов для значений атрибутов в XML-документе.
Например, рассмотрим следующий XML-код:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Attribute> в фрагменте правил ниже подтвердит, что значение атрибута WEB не превышает 10 символов.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Элемент <ValueLimits>/<NamespaceURI>
Позволяет задать ограничение на количество символов для URI пространств имен, присутствующих в XML-документе.
Например, рассмотрим следующий XML-код:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
<NamespaceURI> в фрагменте правил ниже подтвердит, что значение URI пространства имен http://ns1.com не превышает 10 символов.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Элемент <ValueLimits>/<Comment>
Указывает ограничение на количество символов в комментариях, которые есть в XML-документе.
Например, рассмотрим следующий XML-код:
<book category="WEB"> <!-- This is a comment --> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Comment> в фрагменте правил ниже подтвердит, что текст комментария This is a comment не превышает 10 символов.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Элемент <ValueLimits>/<ProcessingInstructionData>
Позволяет задать ограничение на количество символов для любого текста инструкции по обработке, присутствующего в XML-документе.
Например, рассмотрим следующий XML-код:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<ProcessingInstructionData> в фрагменте правил ниже подтвердит, что текст инструкции по обработке type="text/xsl" href="style.xsl" не превышает 10 символов.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| По умолчанию: | Если вы не укажете лимит, система применит значение по умолчанию – -1, которое считается отсутствием лимита. |
| Присутствие | Необязательно |
| Тип: |
Целое число |
Справочник по ошибкам
.
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Причина | Исправить |
|---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 | Правило XMLThreatProtection может вызывать ошибки ExecutionFailed разных типов. Большинство этих ошибок возникают, когда превышается определенный порог, заданный в правилах. К таким ошибкам относятся: длина названия элемента, количество дочерних элементов, глубина узла, количество атрибутов, длина названия атрибута и многие другие. Полный список приведен в разделе Устранение неполадок с ошибками выполнения правил XMLThreatProtection. | build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
Эта ошибка возникает, если полезная нагрузка входного сообщения, указанная элементом <Source> правила XMLThreatProtection, не является действительным XML-документом.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
Эта ошибка возникает, если переменная message, указанная в элементе <Source>, является:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
Эта ошибка возникает, если для элемента <Source> задана переменная, которая не относится к типу message.
|
build |
Примечания
- Название ошибки ExecutionFailed является названием по умолчанию и возвращается независимо от типа обнаруженной ошибки. Однако это значение по умолчанию можно изменить, задав свойство на уровне организации. Если это свойство задано, название ошибки будет отражать фактическую ошибку. Например, TextExceeded или AttrValueExceeded. Подробную информацию можно найти в разделе Примечания по использованию.
- По умолчанию используется статус HTTP 500, но его можно изменить на 400 для ошибок в потоке запросов, задав свойство на уровне организации. Подробную информацию можно найти в разделе Примечания по использованию.
Ошибки развертывания
Нет.
Переменные ошибок
Эти переменные задаются при возникновении ошибки выполнения. Подробнее о нарушениях правил…
| Переменные | Место | Пример |
|---|---|---|
fault.name="fault_name" |
fault_name – название ошибки, указанное в таблице Ошибки выполнения выше. Название ошибки – это последняя часть кода ошибки. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | xmlattack.XPT-SecureRequest.failed = true |
Пример ответа об ошибке
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
Пример правила обработки ошибок
<FaultRule name="XML Threat Protection Policy Faults">
<Step>
<Name>AM-CustomErrorResponse</Name>
<Condition>(fault.name Matches "ExecutionFailed") </Condition>
</Step>
<Condition>(xmlattack.XPT-SecureRequest.failed = true) </Condition>
</FaultRule>Схемы
Примечания
Любой сервер, получающий онлайн-данные, может подвергнуться атаке, как злонамеренной, так и случайной. Некоторые атаки используют гибкость XML, создавая недопустимые документы, которые могут поставить под угрозу работу внутренних систем. Поврежденные или слишком сложные XML-документы могут привести к тому, что серверы выделят больше памяти, чем доступно, что приведет к перегрузке ресурсов ЦП и памяти, сбоям в работе парсеров и, как следствие, к невозможности обрабатывать сообщения и атакам типа "отказ в обслуживании" на уровне приложений.
Ошибка конфигурации защиты от угроз
Важная информация для тех, кто создает правила FaultRules для этого правила. По умолчанию Edge возвращает код статуса HTTP 500 Internal Server Error и код ошибки ExecutionFailed, если сообщение не проходит проверку правилом защиты от угроз JSON или XML. Вы можете изменить это поведение с помощью нового свойства на уровне организации. Если задать для свойства org значение features.isPolicyHttpStatusEnabled, произойдет следующее:
- Запрос: если к любому потоку запросов прикреплено правило защиты от угроз, недопустимые сообщения возвращают код статуса 400 "Недопустимый запрос" вместе с соответствующим кодом ошибки правила (а не просто ExecutionFailed).
- Ответ. Если к любому потоку ответов прикреплено правило защиты от угроз, недействительные сообщения по-прежнему возвращают код статуса 500 (Внутренняя ошибка сервера), и возникает один из соответствующих кодов ошибки правила (а не просто ExecutionFailed).
Клиенты облачной версии должны обратиться в службу поддержки Apigee Edge, чтобы задать свойство организации.