Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
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 contra XML mediante los siguientes enfoques:
- Evalúa el 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
Esta política es una política extensible, y el uso de esta puede tener implicaciones de costo o uso, según tu licencia de Apigee. Para obtener información sobre los tipos de políticas y sus implicaciones de uso, consulta Tipos de políticas.
Mira un video breve sobre la protección contra amenazas
Video: Mira un video breve sobre las políticas de protección contra amenazas de la serie de videos de cuatro minutos para desarrolladores (4MV4D).
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 | Configuración predeterminada | Presence |
|---|---|---|---|
name |
El nombre interno de la política. El valor del atributo De forma opcional, usa el elemento |
N/A | Obligatorio |
continueOnError |
Configúralo como Configúralo como |
false | Opcional |
enabled |
Configúralo como Configúralo como |
true | Opcional |
async |
Este atributo dejó de estar disponible. |
false | Obsoleto |
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>
| Configuración predeterminada |
N/A Si omites este elemento, se usa el valor del atributo |
|---|---|
| Presence | Opcional |
| Tipo | String |
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: | N/A |
| Presencia: | Opcional |
| Tipo: | N/A |
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: | 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: | 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 |
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: | N/A |
| Presencia: | Opcional |
| Tipo: | N/A |
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: |
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>
<AttributeCountPerElement> en el fragmento de política que se muestra 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: |
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: |
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: |
Entero |
Atributos
| Atributo | Predeterminado | Presencia |
|---|---|---|
| includeComment | verdadero | Opcional |
| includeElement | verdadero | Opcional |
| includeProcessingInstructions | verdadero | Opcional |
| includeText | verdadero | 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: | N/A |
| Presencia: | Opcional |
| Tipo: |
N/A |
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>
<Text> en el fragmento de política incluido a continuación validará que los valores de texto del elemento Learning XML, Erik T.
Ray, y 2003 no excedan 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: |
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>
<Attribute> en el fragmento de política incluido a continuación validará que el valor del atributo WEB 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: |
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"/>
<NamespaceURI> en el fragmento de política incluido a continuación validará que el valor de URI de espacio de nombres http://ns1.com 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: |
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>
<Comment> en el fragmento de política que aparece a continuación validará que el texto del comentario This is a comment no exceda 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: |
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"?>
<ProcessingInstructionData> en el fragmento de política incluido a continuación validará que el texto de instrucción de procesamiento type="text/xsl" href="style.xsl" 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: |
Entero |
Referencia de errores
.
En esta sección se describen los códigos de error y los mensajes de error que devuelve Apigee, así como las variables de error que define, cuando esta política activa un error. Es importante que conozcas esta información si vas a desarrollar reglas de errores para gestionarlos. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo gestionar los fallos.
Errores de tiempo de ejecución
Estos errores pueden producirse cuando se ejecuta la política.
| Código de fallo | Estado de HTTP | Causa | Solucionar |
|---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 |
La política XMLThreatProtection puede generar muchos tipos distintos de errores ExecutionFailed.
La mayoría de estos errores se producen cuando se supera un umbral específico establecido en la política. Estos tipos de errores incluyen:
longitud del nombre del elemento,
número de elementos secundarios,
profundidad del nodo,
número de atributos,
longitud del nombre del atributo
y muchos otros. Puedes ver la lista completa en el tema Solución de problemas de errores de tiempo de ejecución de la política XMLThreatProtection.
|
build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
Este error se produce si la carga útil del mensaje de entrada especificada por el elemento <Source> de la política XMLThreatProtection no es un documento XML válido.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
Este error se produce si la variable message
especificada en el elemento <Source> es:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
Este error se produce si el elemento <Source> se asigna a una variable que no es del tipo message.
|
build |
Errores de implementación
Ninguno
Variables de error
Estas variables se definen cuando se produce un error de tiempo de ejecución. Para obtener más información, consulta el artículo Información sobre los errores de las políticas.
| Variables | Dónde | Ejemplo |
|---|---|---|
fault.name="fault_name" |
fault_name es el nombre del fallo, tal como se indica en la tabla Errores de tiempo de ejecución de arriba. El nombre del error es la última parte del código de error. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name es el nombre de la política especificado por el usuario que ha provocado el error. | xmlattack.XPT-SecureRequest.failed = true |
Ejemplo de respuesta de error
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
Regla de error de ejemplo
<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, Apigee arroja un código de estado de error interno del servidor HTTP 500 y un código de error ExecutionFailed si un mensaje no pasa una política de protección contra amenazas de 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 Atención al cliente de Google Cloud para configurar la propiedad de la organización.
curl -u email:password -X POST -H "Content-type:application/xml" http://host:8080/v1/o/myorg -d \ "<Organization type="trial" name="MyOrganization"> <Environments/> <Properties> <Property name="features.isPolicyHttpStatusEnabled">true</Property> ... </Properties> </Organization>"
Temas relacionados
Política de protección contra amenazas de JSON
Política de protección de expresiones regulares