<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><\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>
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 <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
.
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 : <!--#(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 : <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
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êteContent-Type
de la requête doit être un type de contenu XML, tel queapplication/xml
outext/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êteContent-Type
de la requête doit être un type de contenu JSON tel queapplication/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 Vous pouvez également utiliser l'élément |
ND | Valeur |
continueOnError |
Définissez sur Définissez sur |
faux | Facultatif |
enabled |
Définissez sur Définissez sur |
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 |
---|---|
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 pour être utilisée 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>
Spécifie le type de données.<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 : |
É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 |
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
Cette section décrit les codes d'erreur et les messages renvoyés et les variables d'erreur définies par Edge lorsque cette stratégie déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Si vous souhaitez capturer une erreur et générer votre propre erreur personnalisée, définissez l'attribut continueOnError="true"
sur l'élément racine de la règle.
Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.
Les erreurs renvoyées par les stratégies Edge suivent un format cohérent, comme décrit dans la référence du code d'erreur.
Erreurs d'exécution
Ces erreurs peuvent se produire lors de l'exécution de la règle.
Code d'erreur | Message |
---|---|
ExecutionFailed | Échec de l'exécution de RegularExpressionProtection StepDefinition {0}. Motif : {1} |
InstantiationFailed | Échec de l'instanciation de RegularExpressionProtection StepDefinition {0} |
NonMessageVariable | La variable {0} ne pointe pas vers un Message |
SourceMessageNotAvailable | Le message {0} n'est pas disponible pour RegularExpressionProtection StepDefinition {1} |
ThreatDetected | Menace d'expression régulière détectée dans {0}: regex: {1} input: {2} |
VariableResolutionFailed | Échec de la résolution de la variable {0} |
Erreurs de déploiement
Code d'erreur | Message | Corriger |
---|---|---|
CannotBeConvertedToNodeset | RegularExpressionProtection {0}: le résultat de xpath {1} ne peut pas être converti en ensemble de nœuds. Contexte {2} | build |
DuplicatePrefix | RegularExpressionProtection {0}: Dupliquer le préfixe {1} | build |
EmptyJSONPathExpression | RegularExpressionProtection {0}: Expression JSONPath vide | build |
EmptyXPathExpression | RegularExpressionProtection {0}: Expression XPath vide | build |
InvalidRegularExpression | RegularExpressionProtection {0}: Expression régulière non valide {1}, Contexte {2} | build |
JSONPathCompilationFailed | RegularExpressionProtection {0}: échec de la compilation de jsonpath {1}. Contexte {2} | build |
NONEmptyPrefixMappedToEmptyURI | RegularExpressionProtection {0}: Le préfixe non vide {1} ne peut pas être mappé avec l'URI vide. | build |
NoPatternsToEnforce | RegularExpressionProtection {0}: Aucun modèle à appliquer dans {1} | build |
NothingToEnforce | RegularExpressionProtection {0}: Au moins un URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload est obligatoire. | build |
XPathCompilationFailed | RegularExpressionProtection {0}: Échec de la compilation de xpath {1}. Contexte {2} | build |
Variables de panne
Ces variables sont définies lorsque cette règle déclenche une erreur. Pour en savoir plus, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.
Variables | Où : | Exemple |
---|---|---|
fault.name="fault_name" |
fault_name est le nom de l'erreur, comme indiqué dans le tableau ci-dessus. | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |