Политика XMLThreatProtection

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Что

Устраните уязвимости 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

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы отключить политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

элемент <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>
По умолчанию: запрос
Присутствие: Необязательный
Тип:

Нить.

Выберите один из вариантов: request , response или message .

элемент <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 , что соответствует отсутствию ограничения.
Присутствие: Необязательный
Тип:

Целое число

Атрибуты

Атрибут По умолчанию Присутствие
includeComment истинный Необязательный
includeElement истинный Необязательный
includeProcessingInstructions истинный Необязательный
includeText истинный Необязательный

элемент <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 .
steps.xmlthreatprotection.InvalidXMLPayload 500 Эта ошибка возникает, если полезные данные входного сообщения, указанные элементом <Source> политики XMLThreatProtection, не являются допустимым XML-документом.
steps.xmlthreatprotection.SourceUnavailable 500 Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> , имеет одно из следующих значений:
  • Вне области действия (недоступно в конкретном потоке, в котором выполняется политика)
  • Не является одним из допустимых значений request , response или message
steps.xmlthreatprotection.NonMessageVariable 500 Эта ошибка возникает, если для элемента <Source> установлена ​​переменная, которая не имеет типа message .

Примечания:

  • Имя ошибки 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 Internal Server Error и код ошибки ExecutionFailed, если сообщение не проходит проверку политики защиты от угроз в формате JSON или XML. Вы можете изменить это поведение обработки ошибок с помощью нового свойства на уровне организации. При установке свойства организации features.isPolicyHttpStatusEnabled в значение true происходит следующее:

  • Запрос: При наличии политики защиты от угроз, прикрепленной к любому потоку запросов, некорректные сообщения возвращают код состояния 400 Bad Request , а также соответствующий код ошибки политики (а не просто ExecutionFailed).
  • Ответ: При наличии политики защиты от угроз, прикрепленной к любому потоку ответа, некорректные сообщения по-прежнему возвращают код состояния 500 Internal Server Error , и выдается один из соответствующих кодов ошибок политики (а не просто ExecutionFailed).

Клиентам облачной версии необходимо обратиться в службу поддержки Apigee Edge для настройки свойства организации.

Связанные темы

Политика защиты от угроз JSON

Политика защиты регулярных выражений

,

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Что

Устраните уязвимости 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

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы отключить политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

элемент <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>
По умолчанию: запрос
Присутствие: Необязательный
Тип:

Нить.

Выберите один из вариантов: request , response или message .

элемент <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 , что соответствует отсутствию ограничения.
Присутствие: Необязательный
Тип:

Целое число

Атрибуты

Атрибут По умолчанию Присутствие
includeComment истинный Необязательный
includeElement истинный Необязательный
includeProcessingInstructions истинный Необязательный
includeText истинный Необязательный

элемент <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 .
steps.xmlthreatprotection.InvalidXMLPayload 500 Эта ошибка возникает, если полезные данные входного сообщения, указанные элементом <Source> политики XMLThreatProtection, не являются допустимым XML-документом.
steps.xmlthreatprotection.SourceUnavailable 500 Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> , имеет одно из следующих значений:
  • Вне области действия (недоступно в конкретном потоке, в котором выполняется политика)
  • Не является одним из допустимых значений request , response или message
steps.xmlthreatprotection.NonMessageVariable 500 Эта ошибка возникает, если для элемента <Source> установлена ​​переменная, которая не имеет типа message .

Примечания:

  • Имя ошибки 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 Internal Server Error и код ошибки ExecutionFailed, если сообщение не проходит проверку политики защиты от угроз в формате JSON или XML. Вы можете изменить это поведение обработки ошибок с помощью нового свойства на уровне организации. При установке свойства организации features.isPolicyHttpStatusEnabled в значение true происходит следующее:

  • Запрос: При наличии политики защиты от угроз, прикрепленной к любому потоку запросов, некорректные сообщения возвращают код состояния 400 Bad Request , а также соответствующий код ошибки политики (а не просто ExecutionFailed).
  • Ответ: При наличии политики защиты от угроз, прикрепленной к любому потоку ответа, некорректные сообщения по-прежнему возвращают код состояния 500 Internal Server Error , и выдается один из соответствующих кодов ошибок политики (а не просто ExecutionFailed).

Клиентам облачной версии необходимо обратиться в службу поддержки Apigee Edge для настройки свойства организации.

Связанные темы

Политика защиты от угроз JSON

Политика защиты регулярных выражений