Règle de protection contre les expressions régulières

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

Quoi

Extrait les informations d'un message (par exemple, Chemin d'URI, Paramètre de requête, En-tête, Paramètre de formulaire, Variable, Charge utile XML ou Charge utile JSON) et évalue le contenu par rapport à des expressions régulières prédéfinies. Si l'une des expressions régulières spécifiées renvoie la valeur "true", le message est considéré comme une menace et est rejeté.

Vidéos

Regardez les vidéos suivantes pour en savoir plus sur le règlement concernant la protection des expressions régulières.

Vidéo Description
Protection contre les attaques par injection SQL (New Edge) Protégez-vous contre les attaques par injection SQL à l'aide de la règle de protection des expressions régulières dans l'interface utilisateur de New Edge Experience.
Protection contre les attaques par injection SQL (Classic Edge) Protégez-vous contre les attaques par injection SQL à l'aide de la règle de protection des expressions régulières dans l'interface utilisateur Classic Edge.

Exemples

GitHub

L'exemple de protection des expressions régulières disponible sur GitHub montre comment détecter des attaques d'injection SQL potentielles émises via un paramètre de requête. En outre, cet exemple illustre une bonne pratique permettant de définir un état d'erreur générique 400 pour empêcher les pirates informatiques d'obtenir des informations utiles à partir de la réponse.

JavaScript inclut une protection contre les attaques.

<RegularExpressionProtection name="JsonPathRegExProtection">
    <DisplayName>Regular Expression Protection 1</DisplayName>
    <Source>request</Source>
    <JSONPayload escapeSlashCharacter="true">
       <JSONPath>
          <Expression>$</Expression>
          <Pattern>&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt;
          </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>

L'exemple ci-dessus montre comment utiliser la règle RegularExpressionProtection pour évaluer les charges utiles JSON pour JavaScript, notamment les attaques. Plus précisément, le contenu extrait par <JSONPath>/<Expression> est évalué par rapport à l'expression régulière dans <JSONPath>/<Pattern>.

Si l'expression régulière de <JSONPath>/<Pattern> inclut des caractères réservés au format XML (", &, ', < ou .), vous devez l'encoder en XML avant de l'inclure dans le fichier de configuration XML de la stratégie. Dans l'exemple ci-dessus, l'expression régulière <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*> a été encodée au format XML en tant que &lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt;.

En outre, si votre expression régulière inclut des barres obliques (/), vous devez les échapper en définissant l'attribut <JSONPayload> escapeSlashCharacter sur true.

Correspondance non sensible à la casse

Il s'agit d'un cas d'utilisation courant pour effectuer une correspondance non sensible à la casse. Voici un exemple où vous pouvez effectuer cette opération dans une expression régulière à l'aide de la création de (?i). Dans cet exemple, DELETE, delete et Delete seront "true".

<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>

À propos de la règle de protection des expressions régulières

Apigee Edge vous permet de configurer des expressions régulières pouvant être par rapport au trafic de l'API lors de l'exécution afin d'identifier les menaces courantes au niveau du contenu qui suivent certains modèles.

Une expression régulière (ou expression régulière) est un ensemble de chaînes spécifiant un modèle dans une chaîne. Les expressions régulières permettent d'évaluer le contenu de manière automatisée pour identifier des schémas. Les expressions régulières peuvent être utilisées, par exemple, pour évaluer une adresse e-mail afin de vous assurer qu'elle est correctement structurée. Pour en savoir plus, consultez la page Expressions régulières des tutoriels Java.

L'utilisation la plus courante de RegularExpressionProtection est l'évaluation des charges utiles JSON et XML afin de détecter du contenu malveillant.

Aucune expression régulière ne peut éliminer toutes les attaques basées sur le contenu. Plusieurs mécanismes doivent être combinés pour permettre une défense en profondeur. Cette section décrit des schémas recommandés pour exclure du contenu.

Exemples de formats d'exclusion

Les expressions régulières doivent être encodées au format XML dans le fichier de configuration XML de la règle.

Nom Expression régulière
Injection SQL
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))
Injection de commande SSI
<!--#(include|exec|echo|config|printenv)\s+.*

Encodage XML :

&lt;!--#(include|exec|echo|config|printenv)\s+.*
Injection de syntaxe abrégée XPath
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+
Injection de syntaxe développée XPath
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling))
Injection JavaScript
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*>

Encodage XML :

&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*/\s*script\s*&gt;
Injection d'exceptions Java
.*?Exception in thread.*

Définir l'en-tête "Content-Type" dans une requête avec une charge utile XML ou JSON

La charge utile de la règle de protection des expressions régulières peut inclure les éléments suivants :

  • Élément <XMLPayload> : spécifie que les informations doivent être extraites d'une charge utile XML et évaluées par rapport à l'expression régulière fournie.

    Si vous utilisez <XMLPayload> dans la règle, l'en-tête Content-Type de la requête doit être un type de contenu XML, tel que application/xml ou text/xml.

  • Élément <JSONPayload> : indique que les informations doivent être extraites d'une charge utile JSON et évaluées par rapport à l'expression régulière fournie.

    Si vous utilisez <JSONPayload> dans la règle, l'en-tête Content-Type de la requête doit être un type de contenu JSON tel que application/json.

Généralement, vous concevez une API pour accepter les formats XML ou JSON. Toutefois, il existe un scénario dans lequel l'API a accepté les deux. Vous pouvez ensuite définir une règle de protection des expressions régulières qui utilise à la fois les éléments <XMLPayload> et <JSONPayload>. Un seul élément peut s'appliquer à une requête spécifique en fonction de la valeur de l'en-tête Content-Type.

Documentation de référence des éléments

La documentation de référence des éléments décrit les éléments et les attributs de la règle 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>

Attributs <RegularExpressionProtection>

<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">

Le tableau suivant décrit les attributs communs à tous les éléments parents des règles :

Attribut Description Par défaut Présence
name

Nom interne de la règle. La valeur de l'attribut name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion, en utilisant un nom différent, en langage naturel.

ND Valeur
continueOnError

Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles.

Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle.

faux Facultatif
enabled

Définissez sur true pour appliquer la règle.

Définissez sur false pour désactiver la règle. La stratégie ne sera pas appliquée, même si elle reste associée à un flux.

vrai Facultatif
async

Cet attribut est obsolète.

faux Obsolète

Élément <DisplayName>

Utilisez-le, en plus de l'attribut name, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent, en langage naturel.

<DisplayName>Policy Display Name</DisplayName>
Par défaut

ND

Si vous omettez cet élément, la valeur de l'attribut name de la règle est utilisée.

Présence Facultatif
Type Chaîne

Élément <Source>

Indique le message à partir duquel les informations doivent être extraites.

Si l'élément <Source> est omis, la valeur par défaut est message. Par exemple, <Source>message</Source>. Lorsqu'il est défini sur message, la règle utilise le message de requête comme source lorsqu'il est associé à un flux de requête. De même, la règle utilise le message de réponse lorsqu'il est associé à un flux de réponse.

Si le message source ne peut pas être résolu ou s'il est résolu en un type qui n'est pas un message, la règle renvoie une erreur.

<Source>response</Source>
Valeur par défaut : ND
Présence : Facultatif
Type : Chaîne

Élément <IgnoreUnresolvedVariables>

Détermine si la stratégie renvoie une erreur lorsqu'elle rencontre une variable impossible à résoudre.

Si elle est définie sur false (valeur par défaut), la stratégie renvoie une erreur lorsqu'une variable impossible à résoudre est rencontrée. Si elle est définie sur true, la variable non résolue est traitée comme une chaîne vide (Null).

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Valeur par défaut : faux
Présence : Facultatif
Type : Booléen

Élément <URIPath>

Spécifie que les informations doivent être extraites du chemin de l'URI de la requête et évaluées par rapport aux expressions régulières fournies. Vous devez fournir au moins un élément <Pattern> spécifiant un modèle d'expression régulière à mettre en correspondance.

<URIPath>
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</URIPath>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Élément <QueryParam>

Indique que les informations doivent être extraites du paramètre de requête et évaluées par rapport aux expressions régulières fournies. Vous devez fournir au moins un élément <Pattern> spécifiant un modèle d'expression régulière à mettre en correspondance.

<QueryParam name="a-query-param">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</QueryParam>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Attributs

Attribut Description Par défaut Présence
nom Nom du paramètre de requête à partir duquel les informations doivent être extraites pour être évaluées par rapport aux expressions régulières fournies. ND Valeur

Élément <Header>

Indique que les informations doivent être extraites des en-têtes de requête et de réponse et évaluées par rapport aux expressions régulières fournies. Vous devez fournir au moins un élément <Pattern> spécifiant un modèle d'expression régulière à mettre en correspondance.

<Header name="a-header">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</Header>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Attributs

Attribut Description Par défaut Présence
nom

Nom de l'en-tête de requête et de réponse à partir duquel les informations doivent être extraites afin d'être évaluées par rapport aux expressions régulières fournies.

ND Valeur

Élément <FormParam>

Spécifie que les informations doivent être extraites du paramètre de formulaire de requête et évaluées par rapport aux expressions régulières fournies. Vous devez fournir au moins un élément <Pattern> spécifiant un modèle d'expression régulière à mettre en correspondance.

<FormParam name="a-form-param">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</FormParam>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Attributs

Attribut Description Par défaut Présence
nom

Nom du paramètre de formulaire de requête à partir duquel les informations doivent être extraites pour être évaluées par rapport aux expressions régulières fournies.

ND Valeur

Élément <Variable>

Indique que les informations doivent être extraites de la variable donnée et évaluées par rapport aux expressions régulières fournies.

<Variable name="request.content">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</Variable>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Attributs

Attribut Description Par défaut Présence
nom

Nom de la variable à partir de laquelle les informations doivent être extraites pour être évaluées par rapport aux expressions régulières fournies.

ND Valeur

Élément <XMLPayload>

Spécifie que les informations doivent être extraites d'une charge utile XML et évaluées par rapport aux expressions régulières fournies.

<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>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Élément <XMLPayload>/<Namespaces>

Spécifie les espaces de noms à utiliser dans l'évaluation 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>
Valeur par défaut : ND
Présence : Facultatif
Type : Chaîne

Élément <XMLPayload>/<Namespaces>/<Namespace>

Spécifie chaque espace de noms à utiliser dans l'évaluation XPath.
<Namespaces>
   <Namespace prefix="apigee">http://www.apigee.com</Namespace>
</Namespaces>
Valeur par défaut : ND
Présence : Facultatif
Type : Chaîne

Attributs

Attribut Description Par défaut Présence
prefix

Fournit un préfixe permettant de qualifier un espace de noms donné.

ND Valeur

Élément <XMLPayload>/<XPath>

Spécifie le chemin XPath à évaluer.
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Élément <XMLPayload>/<XPath>/<Expression>

Spécifie l'expression XPath définie pour la variable. Seules les expressions XPath 1.0 sont acceptées. Par exemple, <Expression>/company/employee[@age>=$request.header.age]</Expression> extrait les détails des employés dont l'âge est supérieur ou égal à la valeur spécifiée dans request.header.age.
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Valeur par défaut : ND
Présence : Facultatif
Type : Chaîne

Élément <XMLPayload>/<XPath>/<Type>

Specifies the datatype.
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Valeur par défaut : chaîne
Présence : Facultatif
Type : Chaîne
Valeurs correctes :

String. Les valeurs autorisées sont les suivantes : string, boolean, int, long, float, double et nodeset.

Élément <XMLPayload>/<XPath>/<Pattern>

Définit le modèle d'expression régulière. Si une expression régulière de votre élément <Pattern> inclut des caractères réservés au format XML (", &, ', < ou .), vous devez l'encoder en XML avant de l'inclure.

<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Valeur par défaut : ND
Présence : Requis
Type : Chaîne

Élément <JSONPayload>

Spécifie que les informations doivent être extraites d'une charge utile JSON et évaluées en fonction des expressions régulières fournies.

<JSONPayload>
   <JSONPath>
      <Expression>$.store.book[*].author</Expression>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </JSONPath>
</JSONPayload>
Valeur par défaut : ND
Présence : Facultatif
Type : ND

Attributs

Attribut Description Par défaut Présence
escapeSlashCharacter

Définissez la valeur sur true pour échapper toute barre oblique (/) dans les expressions régulières de <JSONPath>/<Pattern>.

vrai Facultatif

Élément <JSONPayload>/<JSONPath>/<Expression>

Spécifie l'expression JSONPath définie pour la variable.

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
Valeur par défaut : ND
Présence : Facultatif
Type : Chaîne

Élément <JSONPayload>/<JSONPath>/<Pattern>

Définit le modèle d'expression régulière. Si une expression régulière de votre élément <Pattern> inclut des caractères réservés au format XML (", &, ', < ou .), vous devez l'encoder en XML avant de l'inclure.

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
Valeur par défaut : ND
Présence : Requis
Type : Chaîne

Informations de référence sur les erreurs

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}
DuplicatePrefix RegularExpressionProtection {0}: Duplicate prefix {1}
EmptyJSONPathExpression RegularExpressionProtection {0}: Empty JSONPath expression
EmptyXPathExpression RegularExpressionProtection {0}: Empty XPath expression
InvalidRegularExpression RegularExpressionProtection {0}: Invalid Regular Expression {1}, Context {2}
JSONPathCompilationFailed RegularExpressionProtection {0}: Failed to compile jsonpath {1}. Context {2}
NONEmptyPrefixMappedToEmptyURI RegularExpressionProtection {0}: Non-empty prefix {1} cannot be mapped to empty uri
NoPatternsToEnforce RegularExpressionProtection {0}: No patterns to enforce in {1}
NothingToEnforce RegularExpressionProtection {0}: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory
XPathCompilationFailed RegularExpressionProtection {0}: Failed to compile xpath {1}. Context {2}

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

Schémas

Articles associés

Règle de protection contre les menaces JSON

Règle de protection contre les menaces XML