Вы просматриваете документацию 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>
<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>
<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 , которое приравнивается к отсутствию ограничения. |
Присутствие: | Необязательный |
Тип: | Целое число |
Ссылка на ошибку
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 | The XMLThreatProtection policy can throw many different types of ExecutionFailed errors. Most of these errors occur when a specific threshold set in the policy is exceeded. These types of errors include: element name length, child count, node depth, attribute count, attribute name length, and many others. You can see the complete list in the XMLThreatProtection policy runtime error troubleshooting topic. | build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
This error occurs if the input message payload specified by the XMLThreatProtection policy's <Source> element is not a valid XML Document.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element is either:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
This error occurs if the <Source> element is set to a variable which
is not of type
message.
|
build |
Notes:
- The error name ExecutionFailed is the default error name and will be returned regardless of the type of error detected; however, this default can be changed by setting an organization-level property. When this property is set, the error name will reflect the actual error. For example, "TextExceeded" or "AttrValueExceeded". See Usage Notes for details.
- The 500 HTTP status is the default; however, the HTTP Status can be changed to 400 for request flow faults by setting an organization-level property. See Usage Notes for details.
Deployment errors
None.
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | xmlattack.XPT-SecureRequest.failed = true |
Example error response
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
Example fault rule
<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 , чтобы настроить свойство организации.