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.pathest 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_scorecalculée dynamiquement par un processus d'apprentissage automatique qui inspecte les valeurs primitives et dérivées connexes.
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 :
| 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 :
| 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 :
| 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.
| 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 :
| 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 :
| 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.
| 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.
| 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érateurin; par exemple,ip.src in {1.2.3.0/24}. - Dans Wireshark,
sslest 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 uniquesslest utilisé pour déterminer si la connexion entre le client et CIS est chiffrée. - L'opérateur
slicen'est pas pris en charge. - Toutes les fonctions ne sont pas prises en charge. Actuellement,
len()etcount()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).