Utilisation des zones, fonctions et expressions

Outre les actions, les champs et les expressions constituent les éléments de base des règles personnalisées du WAF. Ces éléments se combinent pour définir les critères de correspondance avec une règle personnalisée.

Zones

Lorsque CIS reçoit une demande HTTP, il l'analyse et crée une table de champs pour la mise en correspondance. Cette table de champs n'existe que pendant le traitement de la demande et contient les propriétés de la demande utilisées pour la correspondance des expressions.

Chaque valeur de zone peut être dérivée de différents emplacements, par exemple :

  • Propriétés primitives, obtenues directement à partir du trafic - par exemple, http.request.uri.path.
  • Valeurs dérivées, résultant d'une transformation, d'une composition ou d'une opération de base - par exemple, la valeur de http.request.uri.path est en minuscules et disponible en tant que zone d'une autre zone.
  • Valeurs informatiques, résultant d'une recherche, d'un calcul ou d'une autre intelligence - par exemple, une valeur cf.threat_score calculée dynamiquement par un processus d'apprentissage automatique qui inspecte les valeurs primitives et dérivées connexes.

Zones disponibles

Zones disponibles
Nom de zone Type Exemple de valeur Remarques
http.cookie Chaîne session=A12345;-background=light Cookie complet sous forme de chaîne
http.host Chaîne www.example.com Le nom d'hôte utilisé dans l'URI complet de la requête
http.referer Chaîne En-tête du référent HTTP L'en-tête HTTPrequest Referer, qui contient l'adresse de la page Web qui renvoie vers la page actuellement demandée.
http.request.body.raw Chaîne Le corps de la requête HTTP inchangé.
http.request.full_uri Chaîne https://www.example.com/articles/index?section=539061&expand=comments L'identificateur URI complet tel qu'il a été reçu par le serveur Web (n'inclut pas #fragment qui n'est pas envoyé aux serveurs Web)
http.request.method Chaîne POST La méthode HTTP, en majuscules
http.request.uri Chaîne /articles/index?section=539061&expand=comments URI absolu de la demande
http.request.uri.path Chaîne /articles/index Chemin de la demande
http.request.uri.query Chaîne section=539061&expand=comments Chaîne de demande complète, moins le préfixe de délimitation "?"
http.user_agent Chaîne Mozilla/5.0 (X11 ; Linux x86_64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/65.0.3325.181 Safari/537.36 Agent utilisateur HTTP complet
http.x_forwarded_for Chaîne L'en-tête X-Forwarded-For HTTP complet
ip.src Adresse IP 93.155.208.22 L'adresse IP d' TCP du client, qui peut être ajustée pour refléter l'adresse IP réelle du client d'origine, le cas échéant (par exemple, en utilisant des en-têtes d' HTTP s tels que X-Forwarded-For ou X-Real-IP)
ip.src.region Chaîne Texas La région de géolocalisation associée à l'adresse IP de la requête entrante.
ip.geoip.asnum Nombre 222 Numéro Système autonome (AS)
ip.geoip.country Chaîne Go Le code pays à 2 lettres
ssl Booléen Oui Indique si la connexion HTTP au client est chiffrée
ip.src.subdivision_1_iso_code Chaîne GB-ENG Le code de la région de premier niveau associée à l'adresse IP ISO 3166-2 code de la région de premier niveau associée à l'adresse IP. Lorsque la valeur réelle n'est pas disponible, ce champ contient une chaîne vide. Pour utiliser ce champ, un plan CIS Enterprise est nécessaire.
ip.src.subdivision_2_iso_code Chaîne GB-SWK Le code de la région de second niveau associée à l'adresse IP ISO 3166-2 code de la région de deuxième niveau associée à l'adresse IP. Lorsque la valeur réelle n'est pas disponible, ce champ contient une chaîne vide. Pour utiliser ce champ, un plan CIS Enterprise est nécessaire.
ip.src.is_in_european_union Booléen Pour plus d'informations, voir ip.src.is_in_european_union.

Ces zones standard suivent la convention de dénomination de la référence de la zone d'affichage Wireshark. Toutefois, certaines variations subtiles peuvent exister dans les exemples de valeurs précédents.

En plus des zones standard, les zones Cloudflare suivantes sont également disponibles :

Champs Cloudflare disponibles
Nom de zone Type Exemple de valeur Remarques
cf.client.bot Booléen Oui que la requête provienne d'un bot ou d'un robot d'indexation connu, que ses intentions soient bonnes ou mauvaises.
cf.threat_score Nombre 0 Ce champ indique un score de menace Cloudflare. Auparavant, un score de menace représentait un score de menace Cloudflare de 0 à 100, où 0 indiquait un risque faible. Maintenant, le score de menace est toujours de 0 (zéro).
cf.waf.score Nombre 1-99 Score basé sur l'apprentissage automatique qui estime la probabilité qu'une requête soit malveillante. Les scores vont de 1 (très probablement malveillant) à 99 (très probablement sûr). Un score faible indique un risque plus élevé. Utile pour créer des règles de pare-feu basées sur des seuils.
cf.ray_id Chaîne Il s'agit d'un identifiant donné à chaque requête qui passe par Cloudflare.
cf.edge.server_ip Adresse IP Ce champ indique l'adresse IP du réseau mondial à laquelle la requête HTTP a été résolue. Ce champ n'est significatif que pour les clients BYOIP.
cf.edge.server_port Adresse IP 1-65535 Ce champ indique le numéro de port auquel le réseau mondial de Cloudflare a reçu la demande. Ce champ permet de filtrer le trafic sur un port spécifique.
cf.tls_cipher Chaîne AES128-SHA256 Le code de chiffrement pour la connexion à Cloudflare.
cf.tls_version Chaîne TLSv1.2 La version TLS de la connexion à Cloudflare.

ip.src.is_in_european_union

La demande provient d'un pays de l'Union européenne (UE) et nécessite un plan CIS Enterprise.

Le tableau suivant répertorie les pays de l'UE à partir des données de géolocalisation :

Code et nom du pays
Indicatif du pays Nom du pays
AT Autriche
AX Iles Åland
BE Belgique
BG Bulgarie
CY Chypre
CZ République tchèque
GE Allemagne
DK Danemark
EE Estonie
ES Espagnol
FI Finlande
FR France
GF Guyane française
GP Guadeloupe
GR Grèce
HR Croatie
HU Hongrie
IE Irlande
IT Italie
LT Lituanie
LU Luxembourg
LV Lettonie
MF Saint-Martin
MQ Martinique
MT Malte
NL Les Pays-Bas
PL Pologne
PT Portugal
RE Réunion
RO Roumanie
SE Suède
SI Slovénie
SK Slovaquie
YT Mayotte

Domaines de la gestion des plantes

Bot Management for Enterprise est un module complémentaire payant qui offre une protection sophistiquée contre les bots pour votre domaine. Les clients peuvent identifier le trafic automatisé, prendre les mesures appropriées et consulter des analyses détaillées dans la console.

Le tableau suivant fournit des informations sur les champs bot disponibles :

Champs de gestion des robots Cloufare disponibles
Nom de zone Type Remarques
cf.client.bot Booléen Cette zone indique si la demande provient d'un bot ou d'un moteur de balayage connu, quelle que soit l'intention, bonne ou mauvaise.
cf.bot_management.verified_bot Booléen Indique si la demande provient d'un bot ou d'un crawler connu et fournit les mêmes informations que cf.client.bot. Ce champ est disponible avec CIS Enterprise plan avec Bot management activé.
cf.bot_management.corporate_proxy Booléen Ce champ indique si la requête entrante provient d'un proxy d'entreprise basé sur le cloud ou d'une passerelle web sécurisée. Ce champ est disponible avec CIS Enterprise plan avec Bot management activé.
cf.bot_management.detection_ids Nombre Ce champ répertorie les identifiants des détections heuristiques de Bot Management sur une requête. Ce champ permet de faire correspondre ou d'exclure une heuristique spécifique dans une règle. Une demande peut faire l'objet de plusieurs détections.
cf.bot_management.ja3_hash Chaîne Ce champ fournit une empreinte SSL / TLS pour vous aider à identifier les demandes potentielles des robots. Pour plus d'informations, voir JA3/JA4 Fingerprint. Pour utiliser ce champ, un plan CIS Enterprise est nécessaire avec la gestion de Bot activée.
cf.bot_management.ja4 Chaîne Ce champ fournit une empreinte SSL / TLS pour vous aider à identifier les demandes potentielles des robots. Pour plus d'informations, voir JA3/JA4 Fingerprint. Pour utiliser ce champ, un plan CIS Enterprise est nécessaire avec la gestion de Bot activée.
cf.bot_management.js_detection.passed Booléen Indique si le visiteur a passé une détection JS précédemment. Pour plus d'informations, voir JavaScript detections. Pour utiliser ce champ, un plan CIS Enterprise est nécessaire, avec la gestion de Bot activée.
cf.bot_management.score Nombre Ce champ représente la probabilité qu'une demande provienne d'un robot en utilisant un score de 1 à 99. Un score faible indique que la demande provient d'un robot ou d'un agent automatisé. Un score élevé indique que la demande a été émise par un être humain. Pour utiliser ce champ, un plan CIS Enterprise est nécessaire avec la gestion de Bot activée.
cf.bot_management.static_resource Nombre Indique si les ressources statiques doivent être incluses lorsque vous créez une règle à l'aide de cf.bot_management.score. Pour utiliser ce champ, un plan CIS Enterprise est nécessaire, avec la gestion de Bot activée.
cf.verified_bot_category Chaîne Ce champ indique le type et l'objectif d'un bot vérifié. Pour plus d'informations, voir Catégories de robots vérifiées.

Fonctions

Le langage de règles personnalisées dispose de plusieurs fonctions permettant de convertir des champs.

Ces éléments ne sont actuellement pas pris en charge dans l'Expression Builder.

Fonctions de règles personnalisées
Nom de la fonction Types d'argument Type de retour Exemple d'utilisation Remarques
inférieur Chaîne Chaîne lower(http.host) == "www.example.com" Convertit une zone de chaîne en minuscules. Seuls les octets ASCII en majuscules sont convertis, tous les autres octets sont conservés tels quels.
supérieur Chaîne Chaîne upper(http.host) == "www.example.com" Convertit une zone de chaîne en majuscules. Seuls les octets ASCII minuscules sont convertis, tous les autres octets sont conservés tels quels.

Expressions

Une expression renvoie la valeur true ou false en fonction d'une correspondance avec le trafic entrant. Exemple :

http.host eq "www.example.com" and ip.src in 92.182.212.0/24

Dans cet exemple, deux expressions uniques comprennent une expression composée. Pensez à chaque expression unique comme condition. Chaque condition est évaluée individuellement avant d'appliquer la logique pour déterminer le résultat final de l'expression composée.

En examinant la première expression unique, vous pouvez voir qu'elle contient :

  • une zone - http.host
  • un opérateur de comparaison - eq
  • une valeur - "www.example.com"

Toutes les conditions n'ont pas la même structure. D'autres exemples utilisant différentes structures sont examinés dans la section suivante.

Opérateurs de comparaison

Les opérateurs de comparaison suivants sont disponibles pour utilisation dans les expressions :

Opérateurs de comparaison pour les expressions
Anglais De type C Description
eq == Egal
ne != Non égal
il < Inférieur à
le <= Inférieur ou égal à
gt
Supérieur à
ge

=

Supérieur ou égal à
contient Contient exactement
Correspondances ~ Expression régulière inspirée de Re2
in La valeur apparaît dans un ensemble de valeurs. Prend en charge les plages à l'aide de la notation ".."
not ! Voir la comparaison des valeurs booléennes
bitwise_and & Valeur de la zone de bit de comparaison

Actuellement, l'Expression Builder ne prend en charge que les opérateurs anglais.

Une expression peut contenir un mélange d'opérateurs anglais et de type C. Par exemple, ip.src eq 93.184.216.34 est équivalent à ip.src == 93.184.216.34.

Certains opérateurs de comparaison s'appliquent à des zones spécifiques en fonction du type. La matrice suivante fournit des exemples des opérateurs disponibles pour différents types de zone :

Opérateurs de comparaison pour les champs
Anglais De type C Chaîne Adresse IP Nombre
eq == http.request.uri.path eq "/articles/2008/" ip.src eq 93.184.216.0 cf.threat_score eq 10
ne != http.request.uri.path ne "/articles/2010/" ip.src ne 93.184.216.0 cf.threat_score ne 60
il < http.request.uri.path lt "/articles/2009/" cf.threat_score lt 10
le <= http.request.uri.path le "/articles/2008/" cf.threat_score le 20
gt
http.request.uri.path gt "/articles/2006/" cf.threat_score gt 25
ge

=

Supérieur ou égal à cf.threat_score ge 60
contient http.request.uri.path contains "/articles/"
Correspondances ~ http.request.uri.path ~ "^/articles/200 [7-8] /$"
in http.request.method in { "HEAD" "GET" } ip.src in { 93.184.216.0 93.184.216.1 } cf.threat_score in {0 2 10}

L'évaluation des expressions utilisant des valeurs de chaîne est sensible à la casse. À ce titre, une règle personnalisée peut vous obliger à définir plusieurs conditions de test. Les clients d'entreprise peuvent utiliser une expression régulière avec l'opérateur de correspondances pour capturer plusieurs variations avec une expression unique.

Comparaison booléenne

Pour les zones de type booléen (par exemple, ssl), la zone apparaît par elle-même dans l'expression lors de l'évaluation d'une condition true. Pour une condition false, l'opérateur not s'applique.

Comparaison booléenne
Oui Faux
ssl not ssl

Expressions composées

Vous pouvez créer des expressions composées en regroupant deux ou plusieurs expressions uniques à l'aide d'opérateurs logiques.

Expressions composées
Anglais De type C Description Exemple Priorité
not ! NOT logique not ( http.host eq "www.example.com" and ip.src in 93.184.216.0/24 ) 1
and && AND logique http.host eq "www.example.com" and ip.src in 93.184.216.0/24 2
xor ^^ XOR logique http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 3
ou & verbar; & verbar; OU logique http.host eq "www.example.com" or ip.src in 93.184.216.0/24 4

Pour modifier l'ordre de priorité, vous pouvez regrouper des expressions entre parenthèses. En l'absence de parenthèses, les expressions sont implicitement regroupées en fonction de la priorité standard :

ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth

Application d'un regroupement explicite :

(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth

Donner la priorité à OR avec des parenthèses :

ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)

Notez que si not est utilisé pour le regroupement, il peut être utilisé pour annuler une comparaison unique. Par exemple, not ip.src eq 93.184.216.0 est équivalent à not (ip.src eq 93.184.216.0).

Enfin, vous pouvez également annuler les expressions groupées :

not (http.request.method eq "POST" and http.request.uri.path eq "/login")

Ecarts par rapport aux filtres d'affichage de Wireshark

Les expressions de règles personnalisées s'inspirent des filtres d'affichage de Wireshark. Toutefois, l'implémentation dévie de la façon suivante :

  • Pour les tests d'égalité CIDR IP, Wireshark autorise les plages au format ip.src == 1.2.3.0/24, tandis que CIS ne prend en charge que les tests d'égalité à l'aide d'une seule adresse IP. Pour comparer un CIDR, utilisez l'opérateur in ; par exemple, ip.src in {1.2.3.0/24}.
  • Dans Wireshark, ssl est une zone de protocole contenant des centaines d'autres zones de différents types disponibles pour la comparaison de plusieurs façons. Cependant, dans les règles personnalisées, un champ booléen unique ssl est utilisé pour déterminer si la connexion entre le client et CIS est chiffrée.
  • L'opérateur slice n'est pas pris en charge.
  • Toutes les fonctions ne sont pas prises en charge. Actuellement, len() et count() ne sont pas pris en charge.

Restrictions d'expression

Les restrictions suivantes s'appliquent aux expressions de règle :

  • Une expression de règle peut contenir jusqu'à 4 096 caractères.

    Si vous utilisez le générateur d'expressions dans l'interface utilisateur, cette même limite s'applique à l'aperçu de l'expression générée.

  • Une expression de règle peut contenir au maximum 64 expressions régulières (regex).