Política XMLThreatProtection

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Qué

Aborda las vulnerabilidades deXML y minimiza los ataques en la API. De manera opcional, detecta los ataques de carga útil deXML en función de los límites configurados. Detecta amenazas deXML mediante los siguientes enfoques:

  • Valida mensajes en un esquema XML (.xsd)
  • Evaluarel contenido de los mensajes en busca de palabras clave o patrones específicos para excluir
  • Detectar mensajes dañados o con errores de formato antes de que se analicen

Referencia del elemento

En la referencia del elemento, se describen los elementos y atributos de la política 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>

Atributos <XMLThreatProtection>

<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1"> 

En la siguiente tabla, se describen los atributos que son comunes a todos los elementos principales de las políticas:

Atributo Descripción Predeterminada Presencia
name

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

No disponible Obligatorias
continueOnError

Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas.

Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle.

false Opcional
enabled

Configúralo como true para aplicar la política.

Configúralo como false para desactivar la política. La política no se aplicará incluso si permanece adjunta a un flujo.

true Opcional
async

Este atributo dejó de estar disponible.

false Funciones obsoletas

Elemento <DisplayName>

Se usan además del atributo name para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

<DisplayName>Policy Display Name</DisplayName>
Predeterminada

No disponible

Si omites este elemento, se usa el valor del atributo name de la política.

Presencia Opcional
Tipo Cadena

Elemento <NameLimits>

Especifica los límites de caracteres que la política debe verificar y aplicar.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Predeterminado: No disponible
Presencia: Opcional
Tipo: No disponible

Elemento <NameLimits>/<Element>

Especifica un límite para la cantidad máxima de caracteres permitida en cualquier nombre de elemento en el documento XML.

Por ejemplo, considera el siguiente XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>

Cuando se analiza el XML anterior, el valor del elemento <Element> en el fragmento de política a continuación validará esos nombres de elementos (book, title, author y year) no exceden los 10 caracteres).

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo: Entero

Elemento <NameLimits>/<Attribute>

Especifica un límite para la cantidad máxima de caracteres permitida en cualquier nombre de atributo en el documento XML.

Por ejemplo, considera el siguiente XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>

Cuando se analiza el XML anterior, el valor del elemento <Attribute> en el fragmento de política a continuación validará que el nombre del atributo category no supere los 10 caracteres.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo: Número entero

Elemento <NameLimits>/<NamespacePrefix>

Especifica un límite para la cantidad máxima de caracteres permitida en el prefijo del espacio de nombres en el documento XML.

Por ejemplo, considera el siguiente XML:

<ns1:myelem xmlns:ns1="http://ns1.com"/>

Cuando se analiza el XML anterior, el valor del elemento <NamespacePrefix> en el fragmento de política a continuación validará que el prefijo de espacio de nombres ns1 no supere los 10 caracteres.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo: Número entero

Elemento <NameLimits>/<ProcessingInstructionTarget>

Especifica un límite para la cantidad máxima de caracteres permitida en el objetivo de cualquier instrucción de procesamiento en el documento XML.

Por ejemplo, considera el siguiente XML:

<?xml-stylesheet type="text/xsl" href="style.xsl"?>

Cuando se analiza el XML anterior, el valor del elemento <ProcessingInstructionTarget> en el fragmento de política a continuación validará que el objetivo de instrucción de procesamiento xml-stylesheet no supere los 10 caracteres.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo: Entero

Elemento <Source>

Mensaje que se validará para los ataques de carga útil de XML. Normalmente, este se configura como request, ya que, por lo general, deberás validar las solicitudes entrantes de las apps cliente. Cuando se configura como message, este elemento evaluará de manera automática el mensaje de solicitud cuando se adjunta al flujo de solicitudes y el mensaje de respuesta cuando se adjunta al flujo de respuesta.

<Source>request</Source>
Predeterminado: solicitud
Presencia: Opcional
Tipo:

String.

Selecciona entre request, response o message.

Elemento <StructuralLimits>

Especifica los límites estructurales que la política debe verificar y aplicar.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Predeterminado: No disponible
Presencia: Opcional
Tipo: No disponible

Elemento <StructuralLimits>/<NodeDepth>

Especifica la profundidad de nodo máxima permitida en el archivo XML.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Elemento <StructuralLimits>/<AttributeCountPerElement>

Especifica la cantidad máxima de atributos permitidos para cualquier elemento.

Por ejemplo, considera el siguiente XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Cuando se analiza el XML anterior, el valor del elemento <AttributeCountPerElement> en el fragmento de política que aparece a continuación validará que los elementos book, title, author y year no tengan más de 2 atributos cada uno. Ten en cuenta que los atributos utilizados para definir espacios de nombres no se cuentan.
<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Elemento <StructuralLimits>/<NameSpaceCountPerElement>

Especifica la cantidad máxima de definiciones de espacios de nombres permitidas para cualquier elemento.

Por ejemplo, considera el siguiente XML:

<e1 attr1="val1" attr2="val2">
    <e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/>
</e1>

Cuando se analiza el XML anterior, el valor del elemento <NamespaceCountPerElement> en el fragmento de política que se muestra a continuación validará que los elementos e1 y e2 no tengan más de 2 definiciones de espacios de nombres cada uno. En este caso, <e1> tiene 0 definiciones de espacios de nombres y <e2> tiene 2 definiciones de espacios de nombres: xmlns="http://apigee.com" y 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>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Elemento <StructuralLimits>/<ChildCount>

Especifica la cantidad máxima de elementos secundarios que se permiten para cualquier elemento.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Atributos

Atributo Predeterminada Presencia
includeComment true Opcional
includeElement true Opcional
includeProcessingInstructions true Opcional
includeText true Opcional

Elemento <ValueLimits>

Especifica los límites de caracteres para los valores que la política revisará y aplicará.

<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Predeterminado: No disponible
Presencia: Opcional
Tipo:

No disponible

Elemento <ValueLimits>/<Text>

Especifica un límite de caracteres para cualquier nodo de texto presente en el documento XML.

Por ejemplo, considera el siguiente XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Cuando se analiza el XML anterior, el valor del elemento <Text> en el fragmento de política que aparece a continuación validará que los valores de texto del elemento Learning XML, Erik T. Ray, y 2003 no superen los 15 caracteres cada uno.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Elemento <ValueLimits>/<Attribute>

Especifica un límite de caracteres para los valores de atributos presentes en el documento XML.

Por ejemplo, considera el siguiente XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Cuando se analiza el XML anterior, el valor del elemento <Attribute> en el fragmento de política que aparece a continuación validará que el valor del atributo WEB no exceda los caracteres 10.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Elemento <ValueLimits>/<NamespaceURI>

Especifica un límite de caracteres para cualquier URI de espacio de nombres presente en el documento XML.

Por ejemplo, considera el siguiente XML:

<ns1:myelem xmlns:ns1="http://ns1.com"/>
Cuando se analiza el XML anterior, el valor del elemento <NamespaceURI> en el fragmento de política que aparece a continuación validará que el valor del URI del espacio de nombres http://ns1.com no supere los caracteres 10.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Elemento <ValueLimits>/<Comment>

Especifica un límite de caracteres para cualquier comentario presente en el documento XML.

Por ejemplo, considera el siguiente XML:

<book category="WEB">
   <!-- This is a comment -->
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Cuando se analiza el XML anterior, el valor del elemento <Comment> en el siguiente fragmento de política validará que el texto del comentario This is a comment no supere los 10 caracteres.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Elemento <ValueLimits>/<ProcessingInstructionData>

Especifica un límite de caracteres para cualquier texto de instrucción de procesamiento presente en el documento XML.

Por ejemplo, considera el siguiente XML:

<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Cuando se analiza el XML anterior, el valor del elemento <ProcessingInstructionData> en el fragmento de política que aparece a continuación validará que el texto de instrucciones de procesamiento type="text/xsl" href="style.xsl" no supere los caracteres 10.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Predeterminado: Si no especificas un límite, el sistema aplica un valor predeterminado de -1, que el sistema considera como ningún límite.
Presencia: Opcional
Tipo:

Número entero

Referencia de errores

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.
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.
steps.xmlthreatprotection.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element is either:
  • Out of scope (not available in the specific flow where the policy is being executed)
  • Is not one of the valid values request, response, or message
steps.xmlthreatprotection.NonMessageVariable 500 This error occurs if the <Source> element is set to a variable which is not of type message.

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>

Esquemas

Notas de uso

Cualquier servidor que recibe datos en línea está sujeto a ataques, ya sea maliciosos o no intencionales. Algunos ataques aprovechan la flexibilidad de XML y crean documentos no válidos que tienen el potencial de vulnerar sistemas de backend. Los documentos XML dañados o extremadamente complejos pueden hacer que los servidores asignen más memoria de la que está disponible y se vinculen los recursos de CPU y memoria, haya fallas en los analizadores y, generalmente, se inhabilite el procesamiento de mensajes y la creación de ataques de denegación del servicio a nivel de app.

Configuración de errores de protección contra amenazas

Información importante si creas FaultRules para esta política: De forma predeterminada, Edge arroja un código de estado HTTP 500 de Error interno del servidor y un código de error ExecutionFailed si un mensaje no pasa una política de protección contra amenazas JSON o XML. Puedes cambiar ese comportamiento de error con una nueva propiedad a nivel de la organización. Cuando se configura la propiedad de la organización features.isPolicyHttpStatusEnabled como verdadera, se produce el siguiente comportamiento:

  • Solicitud: si hay una política de protección contra amenazas vinculada a cualquier flujo de solicitud, los mensajes no válidos muestran un código de estado 400 de solicitud incorrecta, junto con un código de error de política correspondiente (en lugar de solo ExecutionFailed).
  • Respuesta: con una política de protección contra amenazas vinculada a cualquier flujo de respuesta, los mensajes no válidos continúan mostrando un código de estado de error interno del servidor 500, y se genera uno de los códigos de error de la política correspondiente (en lugar de solo ExecutionFailed).

Los clientes de Cloud deben comunicarse con la asistencia de Apigee Edge para establecer la propiedad de la organización.

Temas relacionados

Política de protección contra amenazas de JSON

Política de protección de expresiones regulares