Вы просматриваете документацию 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 , которое приравнивается к отсутствию ограничения. |
Присутствие: | Необязательный |
Тип: | Целое число |
Элемент <Источник>
Сообщение должно быть проверено на предмет атак с использованием полезной нагрузки 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>При анализе приведенного выше XML значение элемента
<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> имеет 0 определений пространства имен, а <e2> имеет 2 определения пространства имен: 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 , которое приравнивается к отсутствию ограничения. |
Присутствие: | Необязательный |
Тип: | Целое число |
Атрибуты
Атрибут | По умолчанию | Присутствие |
---|---|---|
включитькомментарий | истинный | Необязательный |
включитьЭлемент | истинный | Необязательный |
ВключитьОбработкаИнструкций | истинный | Необязательный |
включить текст | истинный | Необязательный |
Элемент <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>При анализе приведенного выше XML значение элемента
<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>При анализе приведенного выше XML значение элемента
<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"/>При анализе приведенного выше XML значение элемента
<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>При анализе приведенного выше XML значение элемента
<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"?>При анализе приведенного выше XML значение элемента
<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 | Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> , имеет одно из следующих значений:
| build |
steps.xmlthreatprotection.NonMessageVariable | 500 | Эта ошибка возникает, если для элемента <Source> установлена переменная, которая не имеет типа message . | build |
Примечания:
- Имя ошибки ExecutionFailed является именем ошибки по умолчанию и будет возвращено независимо от типа обнаруженной ошибки; однако это значение по умолчанию можно изменить, задав свойство на уровне организации. Если это свойство установлено, имя ошибки будет отражать фактическую ошибку. Например, «TextExceeded» или «AttrValueExceeded». Подробности см. в Примечаниях по использованию .
- Статус HTTP 500 является значением по умолчанию; однако статус HTTP можно изменить на 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 и код ошибки ExecutionFailed, если сообщение не проходит политику защиты от угроз JSON или XML. Вы можете изменить это поведение при ошибке с помощью нового свойства уровня организации. При установке для свойства организации features.isPolicyHttpStatusEnabled
значения true происходит следующее:
- Запрос. Если к любому потоку запросов прикреплена политика защиты от угроз, недействительные сообщения возвращают код состояния 400 Bad Request вместе с соответствующим кодом ошибки политики (а не просто ExecutionFailed).
- Ответ: Если к любому потоку ответов прикреплена политика защиты от угроз, недопустимые сообщения по-прежнему возвращают код состояния 500 Internal Server Error и выдается один из соответствующих кодов ошибок политики (а не просто ExecutionFailed).
Клиенты облака должны обратиться в службу поддержки Apigee Edge , чтобы настроить свойство организации.