Политика XMLThreatProtection

Вы просматриваете документацию 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

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

Целое число

Атрибуты

Атрибут По умолчанию Присутствие
включитькомментарий истинный Необязательный
включитьЭлемент истинный Необязательный
ВключитьОбработкаИнструкций истинный Необязательный
включить текст истинный Необязательный

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

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

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

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

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

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