Estás viendo la documentación de Apigee Edge.
Ve a la
Documentación de Apigee X. información

Qué
Extrae información de un mensaje (por ejemplo, URI de la ruta, parámetro de consulta, encabezado, parámetro de forma, variable, carga útil de XML o carga útil de JSON) y evalúa ese contenido en expresiones regulares predefinidas. Si alguna de las expresiones regulares especificadas se evalúa como verdadera, el mensaje se considera una amenaza y se rechaza.
Videos
Para obtener más información sobre la política de Protección contra expresiones regulares, mira los siguientes videos.
Video | Descripción |
---|---|
Protección contra ataques de inyección de SQL (Edge nuevo) | Protégete contra los ataques de inyección SQL con la política de protección contra expresiones regulares en la nueva IU de la experiencia de Edge. |
Protección contra ataques de inyección de SQL (Classic Edge) | Protégete contra los ataques de inyección SQL con la política de protección contra expresiones regulares en la IU clásica de Edge. |
Ejemplos
GitHub
En el ejemplo de protección de regex en GitHub, se ilustra cómo atrapar los posibles ataques de inyección de SQL emitidos a través de un parámetros de búsqueda. Además, en el ejemplo, se muestra una buena práctica para configurar un estado de error genérico 400 a fin de evitar que los hackers obtengan información útil de la respuesta.
JavaScript incluye protección contra ataques
<RegularExpressionProtection name="JsonPathRegExProtection"> <DisplayName>Regular Expression Protection 1</DisplayName> <Source>request</Source> <JSONPayload escapeSlashCharacter="true"> <JSONPath> <Expression>$</Expression> <Pattern><\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*> </Pattern> <Pattern>n\s*\\\\\s*slash</Pattern> <Pattern>n\s*\/\s*slash</Pattern> <Pattern>n\s*\\"\s*quotes</Pattern> <Pattern>n\s*\\b\s*space</Pattern> <Pattern>n\s*\\f\s*forwardfeed</Pattern> <Pattern>n\s*\\n\s*newline</Pattern> <Pattern>n\s*\\r\s*carria</Pattern> <Pattern>n\s*\\t\s*tab</Pattern> <Pattern>n\s*\\uFFFF\s*hex</Pattern> </JSONPath> </JSONPayload> </RegularExpressionProtection>
En el ejemplo anterior, se ilustra cómo usar la política RegularExpressionProtection a fin de evaluar las cargas útiles de JSON para JavaScript mediante ataques. En particular, el contenido extraído por <JSONPath>
/<Expression>
se evalúa en función de la expresión regular en <JSONPath>
/<Pattern>
.
Si la expresión regular en tu <JSONPath>
/<Pattern>
incluye caracteres reservados para XML (", &, ", < o "."), debes codificarla en formato XML antes de incluirla en el archivo de configuración XML de la política. Por ejemplo, en la muestra anterior, la expresión regular <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
se codificó en formato XML como <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
.
Además, si la expresión regular incluye barras diagonales (/), debes marcarlas con la configuración del atributo <JSONPayload>
escapeSlashCharacter
en true
.
Coincidencia sin distinción entre mayúsculas y minúsculas
Es un caso de uso común que hace una coincidencia que no distingue entre mayúsculas y minúsculas. A continuación, te mostramos un ejemplo de cómo puedes hacerlo en una expresión regular mediante la construcción (?i)
. En este ejemplo, por ejemplo, DELETE
, delete
y Delete
se evaluarán como verdadero.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Acerca de la política de protección contra expresiones regulares
Apigee Edge te permite configurar expresiones regulares que pueden en comparación con el tráfico de API en el entorno de ejecución para identificar amenazas comunes a nivel de contenido que ciertos patrones.
Una expresión regular, o regex, es un conjunto de strings que especifican un patrón en una string. Las expresiones regulares permiten que el contenido se evalúe de manera programática para los patrones. Las expresiones regulares se pueden usar, por ejemplo, para evaluar una dirección de correo electrónico a fin de garantizar que esté estructurada de forma correcta. Para obtener más información, consulta Expresiones regulares en los instructivos de Java.
El uso más común de RegularExpressionProtection es la evaluación de las cargas útiles de JSON y XML para el contenido malicioso.
Ninguna expresión regular puede eliminar todos los ataques basados en el contenido y se deben combinar varios mecanismos para permitir la defensa en profundidad. En esta sección, se describen algunos patrones recomendados para excluir contenido.
Ejemplos de patrones de exclusión
Las expresiones regulares deben estar codificadas en XML en el archivo de configuración XML de la política.
Name | Expresión regular |
---|---|
Inyección de SQL |
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
Inyección del lenguaje Server Side Includes |
<!--#(include|exec|echo|config|printenv)\s+.* Codificado en XML: <!--#(include|exec|echo|config|printenv)\s+.* |
Inyección de la sintaxis abreviada de XPath |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
Inyección de la sintaxis expandida de XPath |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
Inyección de JavaScript |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> Codificado en XML: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
Inyección de excepciones de Java |
.*?Exception in thread.* |
Establece el encabezado Content-Type en una solicitud con una carga útil XML o JSON
La carga útil de la política de protección contra expresiones regulares puede incluir los siguientes elementos:
-
Elemento
<XMLPayload>
: especifica que la información se debe extraer de una carga útil de XML y evaluarse en la expresión regular proporcionada.Si usas
<XMLPayload>
en la política, el encabezadoContent-Type
de la solicitud debe ser un tipo de contenido XML, comoapplication/xml
otext/xml
. -
Elemento
<JSONPayload>
: especifica que la información se debe extraer de una carga útil de JSON y evaluar con la expresión regular proporcionada.Si usas
<JSONPayload>
en la política, el encabezadoContent-Type
de la solicitud debe ser un tipo de contenido JSON, comoapplication/json
.
Por lo general, se diseña una API para que acepte XML o JSON. Sin embargo, podría haber una situación en la que la API haya aceptado ambos. Luego, puedes definir una política de protección de expresiones regulares que use los elementos <XMLPayload>
y <JSONPayload>
.
Solo se aplicaría un elemento para una solicitud específica según el valor del encabezado Content-Type
.
Referencia del elemento
En la referencia del elemento, se describen los elementos y atributos de la política RegularExpressionProtection.
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1"> <DisplayName>Regular Expression Protection 1</DisplayName> <Source>response</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath> <QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam> <Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header> <FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam> <Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable> <XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload> <JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload> </RegularExpressionProtection>
Atributos <RegularExpressionProtection>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-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 | Predeterminado | Presencia |
---|---|---|---|
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 |
falso | Opcional |
enabled |
Configúralo como Configúralo como |
true | Opcional |
async |
Este atributo dejó de estar disponible. |
falso | Obsoleta |
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 |
N/A Si omites este elemento, se usa el valor del atributo |
---|---|
Presencia | Opcional |
Tipo | String |
Elemento <Source>
Indica el mensaje del cual se debe extraer la información.
Si se omite el elemento <Source>
, el valor predeterminado es message
. Por ejemplo, <Source>message</Source>
. Cuando se establece en message
, la política usa el mensaje de solicitud como fuente cuando se adjunta a un flujo de solicitud. Del mismo modo, la política usa el mensaje de respuesta cuando se adjunta un flujo de respuesta.
Si el mensaje fuente no se puede resolver o si se resuelve en un tipo que no es de mensaje, la política muestra un error.
<Source>response</Source>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | String |
Elemento <IgnoreUnresolvedVariables>
Determina si la política muestra un error cuando encuentra una variable que no se puede resolver.
Si se configura en false
(el valor predeterminado), la política muestra un error cuando se encuentra una variable no resuelta. Si se configura como true
, la variable sin resolver se trata como una string vacía (nula).
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Predeterminado: | falso |
Presencia: | Opcional |
Tipo: | Booleano |
Elemento <URIPath>
Especifica que la información se debe extraer de la ruta del URI de solicitud y evaluarse con las expresiones regulares proporcionadas. Debes proporcionar al menos un elemento <Pattern>
que especifique un patrón de expresión regular para que coincida.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Elemento <QueryParam>
Especifica que la información se debe extraer del parámetros de búsqueda de solicitud y evaluarse con las expresiones regulares proporcionadas. Debes proporcionar al menos un elemento <Pattern>
que especifique un patrón de expresión regular para que coincida.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
Nombre | Nombre del parámetro de búsqueda de la solicitud desde el que se debe extraer la información para la evaluación en función de las expresiones regulares proporcionadas. | N/A | Obligatorio |
Elemento <Header>
Especifica que la información se debe extraer de los encabezados de la solicitud y la respuesta y evaluarse con las expresiones regulares proporcionadas. Debes proporcionar al menos un elemento <Pattern>
que especifique un patrón de expresión regular para que coincida.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
Nombre |
Nombre del encabezado de la solicitud y la respuesta del que se debe extraer la información para evaluarla en función de las expresiones regulares proporcionadas. |
N/A | Obligatorio |
Elemento <FormParam>
Especifica que la información se debe extraer del parámetro de formato de la solicitud y evaluarse con las expresiones regulares proporcionadas. Debes proporcionar al menos un elemento <Pattern>
que especifique un patrón de expresión regular para que coincida.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
Nombre |
Nombre del parámetro del formato de la solicitud desde el que se debe extraer la información para evaluar en función de las expresiones regulares proporcionadas. |
N/A | Obligatorio |
Elemento <Variable>
Especifica que la información se debe extraer de la variable determinada y evaluar con las expresiones regulares proporcionadas.
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
Nombre |
Nombre de la variable de la que se debe extraer la información para la evaluación en función de las expresiones regulares proporcionadas. |
N/A | Obligatorio |
Elemento <XMLPayload>
Especifica que la información se debe extraer de una carga útil XML y evaluar con las expresiones regulares proporcionadas.
<XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Elemento <XMLPayload>/<Namespaces>
Especifica los espacios de nombres que se usarán en la evaluación de XPath.
<XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | String |
Elemento <XMLPayload>/<Namespaces>/<Namespace>
Especifica cada espacio de nombres que se usará en la evaluación de XPath.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | String |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
prefix |
Proporciona un prefijo para ayudar a calificar un espacio de nombres determinado. |
N/A | Obligatorio |
Elemento <XMLPayload>/<XPath>
Especifica la XPath que se evaluará.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Elemento <XMLPayload>/<XPath>/<Expression>
Especifica la expresión XPath definida para la variable. Solo se admiten expresiones de XPath 1.0. Por ejemplo,<Expression>/company/employee[@age>=$request.header.age]</Expression>
extrae detalles para los empleados cuya edad es mayor o igual que el valor especificado en request.header.age
.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | String |
Elemento <XMLPayload>/<XPath>/<Type>
Especifica el tipo de datos.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predeterminado: | string |
Presencia: | Opcional |
Tipo: | String |
Valores válidos: |
String. Los valores válidos incluyen |
Elemento <XMLPayload>/<XPath>/<Pattern>
Define el patrón de expresión regular. Si una expresión regular en tu elemento <Pattern>
incluye caracteres reservados para XML (", &, ", < o "."), debes codificarla en formato XML antes de incluirla.
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predeterminado: | N/A |
Presencia: | Obligatorio |
Tipo: | String |
Elemento <JSONPayload>
Especifica que la información se debe extraer de una carga útil de JSON y evaluar con las expresiones regulares proporcionadas.
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | N/A |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
escapeSlashCharacter |
Configúralo como |
true | Opcional |
Elemento <JSONPayload>/<JSONPath>/<Expression>
Especifica la expresión JSONPath definida para la variable.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Predeterminado: | N/A |
Presencia: | Opcional |
Tipo: | String |
Elemento <JSONPayload>/<JSONPath>/<Pattern>
Define el patrón de expresión regular. Si una expresión regular en tu elemento <Pattern>
incluye caracteres reservados para XML (", &, ", < o "."), debes codificarla en formato XML antes de incluirla.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Predeterminado: | N/A |
Presencia: | Obligatorio |
Tipo: | String |
Referencia de errores
This section describes the error codes and messages returned and fault variables
set by Edge when this policy triggers an error. This information is important to know if
you are developing fault rules to handle faults. If you want to capture an error and raise your own
custom error, set the continueOnError="true"
attribute on the policy root element.
To learn more, see
What you need to know about policy errors and Handling
faults.
Errors returned from Edge policies follow a consistent format as described in the Error code reference.
Runtime errors
These errors can occur when the policy executes.
Error Code | Message |
---|---|
ExecutionFailed | Failed to execute the RegularExpressionProtection StepDefinition {0}. Reason: {1} |
InstantiationFailed | Failed to instantiate the RegularExpressionProtection StepDefinition {0} |
NonMessageVariable | Variable {0} does not resolve to a Message |
SourceMessageNotAvailable | {0} message is not available for RegularExpressionProtection StepDefinition {1} |
ThreatDetected | Regular Expression Threat Detected in {0}: regex: {1} input: {2} |
VariableResolutionFailed | Failed to resolve variable {0} |
Deployment errors
Error Code | Message | Fix |
---|---|---|
CannotBeConvertedToNodeset | RegularExpressionProtection {0}: Result of xpath {1} cannot be converted to nodeset. Context {2} | build |
DuplicatePrefix | RegularExpressionProtection {0}: Duplicate prefix {1} | build |
EmptyJSONPathExpression | RegularExpressionProtection {0}: Empty JSONPath expression | build |
EmptyXPathExpression | RegularExpressionProtection {0}: Empty XPath expression | build |
InvalidRegularExpression | RegularExpressionProtection {0}: Invalid Regular Expression {1}, Context {2} | build |
JSONPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile jsonpath {1}. Context {2} | build |
NONEmptyPrefixMappedToEmptyURI | RegularExpressionProtection {0}: Non-empty prefix {1} cannot be mapped to empty uri | build |
NoPatternsToEnforce | RegularExpressionProtection {0}: No patterns to enforce in {1} | build |
NothingToEnforce | RegularExpressionProtection {0}: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory | build |
XPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile xpath {1}. Context {2} | build |
Fault variables
These variables are set when this policy triggers an error. 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 table above. | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |