Utilizzo di campi, funzioni ed espressioni

Insieme alle azioni, i campi e le espressioni costituiscono gli elementi fondamentali delle regole personalizzate del WAF. Questi elementi lavorano insieme per definire i criteri di corrispondenza di una regola personalizzata.

Campi

Quando CIS riceve una richiesta di HTTP, la analizza e crea una tabella di campi da abbinare. Questa tabella di campi esiste solo durante l'elaborazione della richiesta e contiene le proprietà della richiesta utilizzate per la corrispondenza delle espressioni.

Ciascun valore di campo può avere origine da diverse fonti, ad esempio:

  • Proprietà primitive, ottenute direttamente dal traffico – ad esempio, http.request.uri.path.
  • Valori derivati, risultanti da una trasformazione, una composizione o un’operazione di base – ad esempio, convertire il valore di http.request.uri.path in minuscolo e renderlo disponibile come campo di un altro campo.
  • Valori di computer, risultanti da una ricerca, un calcolo o altre intelligence – ad esempio, un cf.threat_score calcolato dinamicamente da un processo di machine learning che analizza la primitiva correlata e i valori derivati.

Campi disponibili

Campi disponibili
Nome campo Immettere Valore di esempio Note
http.cookie Stringa session=A12345;-background=light Cookie completo come una stringa
http.host Stringa www.example.com Il nome host utilizzato nell’URI completo della richiesta
http.referer Stringa HTTP header referer L'intestazione HTTPrequest Referer, che contiene l'indirizzo della pagina web che rimanda alla pagina attualmente richiesta.
http.request.body.raw Stringa Il corpo della HTTP richiesta inalterato.
http.request.full_uri Stringa https://www.example.com/articles/index?section=539061&expand=comments L'URI completo così come ricevuto dal server web (non include il #fragment, che non viene inviato ai server web)
http.request.method Stringa POST Il metodo HTTP, in maiuscolo
http.request.uri Stringa /articles/index?section=539061&expand=comments L'URI assoluto della richiesta
http.request.uri.path Stringa /articles/index Il percorso della richiesta
http.request.uri.query Stringa section=539061&expand=comments L'intera stringa di query, meno il prefisso di delimitazione "?"
http.user_agent Stringa Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/65.0.3325.181 Safari/537.36 L'intero agent utente HTTP
http.x_forwarded_for Stringa L'intestazione completa "X-Forwarded-For" HTTP
ip.src Indirizzo IP 93.155.208.22 L'indirizzo IP del client TCP, che può essere modificato per riflettere l'indirizzo IP effettivo del client originale, a seconda dei casi (ad esempio, utilizzando le intestazioni HTTP come X-Forwarded-For o X-Real-IP)
ip.src.region Stringa Texas L'area di geolocalizzazione associata all'indirizzo IP della richiesta in arrivo.
ip.geoip.asnum Numero 222 Il numero Autonomous System (AS)
ip.geoip.country Stringa GB Il codice del paese a 2 lettere
ssl Booleano true Se la connessione HTTP al client è codificata
ip.src.subdivision_1_iso_code Stringa GB-ENG Il codice ISO 3166-2 codice della regione di primo livello associata all'indirizzo IP. Quando il valore effettivo non è disponibile, questo campo contiene una stringa vuota. Per utilizzare questo campo, è necessario un piano CIS Enterprise.
ip.src.subdivision_2_iso_code Stringa GB-SWK Il ISO 3166-2 codice della regione di secondo livello associata all'indirizzo IP. Quando il valore effettivo non è disponibile, questo campo contiene una stringa vuota. Per utilizzare questo campo, è necessario un piano CIS Enterprise.
ip.src.is_in_european_union Booleano Per ulteriori informazioni, vedere ip.src.is_in_european_union.

Questi campi standard seguono la convenzione di denominazione del riferimento del campo di visualizzazione Wireshark. Tuttavia, potrebbero esistere alcune sottili variazioni nei valori dell'esempio precedente.

Oltre ai campi standard, sono disponibili anche i seguenti campi definiti da Cloudflare:

Campi Cloudflare disponibili
Nome campo Immettere Valore di esempio Note
cf.client.bot Booleano true se la richiesta provenga da un bot o da un crawler noto, indipendentemente dal fatto che l'intento sia buono o cattivo.
cf.threat_score Numero 0 Questo campo indica il punteggio di minaccia di Cloudflare. In precedenza, un punteggio di minaccia rappresentava un punteggio di minaccia Cloudflare da 0 a 100, dove 0 indicava un rischio basso. Ora, il punteggio della minaccia è sempre 0 (zero).
cf.waf.score Numero 1-99 Punteggio basato sull'apprendimento automatico che stima la probabilità che una richiesta sia dannosa. I punteggi vanno da 1 (molto probabilmente dannoso) a 99 (molto probabilmente sicuro). Punteggi bassi indicano un rischio maggiore. Utile per creare regole firewall basate su soglie.
cf.ray_id Stringa È un identificatore che viene assegnato a ogni richiesta che passa attraverso Cloudflare.
cf.edge.server_ip Indirizzo IP Questo campo indica l'indirizzo IP della rete globale a cui si è risolta la richiesta HTTP. Questo campo è significativo solo per i clienti BYOIP.
cf.edge.server_port Indirizzo IP 1-65535 Questo campo indica il numero di porta a cui la rete globale di Cloudflare ha ricevuto la richiesta. Utilizzare questo campo per filtrare il traffico su una porta specifica.
cf.tls_cipher Stringa AES128-SHA256 Il cifrario per la connessione a Cloudflare.
cf.tls_version Stringa TLSv1.2 La versione TLS della connessione a Cloudflare.

ip.src.is_in_european_union

La richiesta proviene da un Paese dell'Unione Europea (UE) e richiede un piano CIS Enterprise.

La tabella seguente elenca i Paesi dell'UE in base ai dati di geolocalizzazione:

Codice e nome del paese
Codice paese Nome paese
AT Austria
AX Isole Åland
BE Belgio
BG Bulgaria
CY Cipro
CZ Cechia
GE Germania
DK Danimarca
EE Estonia
ES Spagna
FI Finlandia
FR Francia
GF Guiana francese
GP Guadalupa
GR Grecia
HR Croazia
HU Ungheria
IE Irlanda
IT Italia
LT Lituania
LU Lussemburgo
LV Lettonia
MF Saint Martin
MQ Martinica
MT Malta
NL Paesi Bassi
PL Polonia
PT Portogallo
RE Reunion
RO Romania
SE Svezia
SI Slovenia
SK Slovacchia
YT Mayotte

Campi di gestione dei bot

Bot Management for Enterprise è un componente aggiuntivo a pagamento che fornisce una sofisticata protezione dai bot per il vostro dominio. I clienti possono identificare il traffico automatizzato, intraprendere azioni appropriate e visualizzare analisi dettagliate all'interno della console.

La tabella seguente fornisce informazioni sui campi bot disponibili:

Campi di gestione del bot Cloufare disponibili
Nome campo Immettere Note
cf.client.bot Booleano Questo campo indica se la richiesta proviene da un bot o da un crawler noto, a prescindere dall'intento buono o cattivo.
cf.bot_management.verified_bot Booleano Indica se la richiesta proviene da un bot o crawler noto e fornisce le stesse informazioni di cf.client.bot. Questo campo è disponibile con il piano CIS Enterprise con gestione Bot abilitata.
cf.bot_management.corporate_proxy Booleano Questo campo indica se la richiesta in arrivo proviene da un proxy aziendale identificato basato sul cloud o da un gateway web sicuro. Questo campo è disponibile con il piano CIS Enterprise con gestione Bot abilitata.
cf.bot_management.detection_ids Numero Questo campo elenca gli ID dei rilevamenti euristici di Bot Management su una richiesta. Utilizzare questo campo per abbinare o escludere specifiche euristiche in una regola. Una richiesta può avere più rilevamenti.
cf.bot_management.ja3_hash Stringa Questo campo fornisce un'impronta digitale SSL / TLS che aiuta a identificare potenziali richieste di bot. Per ulteriori informazioni, vedere JA3/JA4 Fingerprint. Per utilizzare questo campo, è necessario un piano CIS Enterprise con gestione Bot abilitata.
cf.bot_management.ja4 Stringa Questo campo fornisce un'impronta digitale SSL / TLS che aiuta a identificare potenziali richieste di bot. Per ulteriori informazioni, vedere JA3/JA4 Fingerprint. Per utilizzare questo campo, è necessario un piano CIS Enterprise con gestione Bot abilitata.
cf.bot_management.js_detection.passed Booleano Indica se il visitatore ha superato un JS Detection in precedenza. Per ulteriori informazioni, consultare la sezione JavaScript. Per utilizzare questo campo, è necessario un piano CIS Enterprise con gestione Bot abilitata.
cf.bot_management.score Numero Questo campo rappresenta la probabilità che una richiesta provenga da un bot utilizzando un punteggio da 1-99. Un punteggio basso indica che la richiesta proviene da un bot o da un agente automatico. Un punteggio elevato indica che la richiesta è stata fatta da un umano. Per utilizzare questo campo, è necessario un piano CIS Enterprise con gestione Bot abilitata.
cf.bot_management.static_resource Numero Indica se le risorse statiche devono essere incluse quando si crea una regola utilizzando cf.bot_management.score. Per utilizzare questo campo, è necessario un piano CIS Enterprise con gestione Bot abilitata.
cf.verified_bot_category Stringa Questo campo fornisce il tipo e lo scopo di un bot verificato. Per ulteriori informazioni, vedere Categorie di bot verificate.

Funzioni

Il linguaggio delle regole personalizzate dispone di diverse funzioni per la conversione dei campi.

Al momento queste funzionalità non sono supportate nell’Expression Builder.

Funzioni regole personalizzate
Nome funzione Tipi di argomento Tipo di ritorno Esempio di utilizzo Note
lower Stringa Stringa lower(http.host) == "www.example.com" Converte un campo stringa in caratteri minuscoli. Vengono convertiti solo i byte ASCII maiuscoli, gli altri byte restano invariati.
upper Stringa Stringa upper(http.host) == "www.example.com" Converte un campo stringa in caratteri maiuscoli. Vengono convertiti solo i byte ASCII minuscoli, gli altri byte restano invariati.

Espressioni

Un'espressione restituisce true o false in base a una corrispondenza con il traffico in entrata. Ad esempio:

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

In questo esempio, due espressioni semplici formano un’espressione composta. Pensa ad ogni singola espressione come a una condizione. Ciascuna condizione viene valutata singolarmente prima di applicare la logica and per determinare il risultato finale dell'espressione composta.

Osservando la prima espressione singola, si può notare che contiene:

  • un campo - http.host
  • un operatore di confronto - eq
  • un valore - "www.example.com"

Non tutte le condizioni hanno la stessa struttura. Nella prossima sezione vengono trattati altri esempi che utilizzano strutture diverse.

Operatori di confronto

Sono disponibili per essere utilizzati nelle espressioni i seguenti operatori di confronto:

Operatori di confronto per espressioni
Inglese Simile a C Descrizione
eq == Uguale a
ne != Diverso da
lt < Minore di
le <= Minore o uguale a
GT
Maggiore di
ge

=

Maggiore o uguale a
contains Contiene esattamente
corrisponde ~ Espressione regolare ispirata a Re2
in Il valore compare in una serie di valori. Supporta gli intervalli utilizzando la notazione "..".
not ! Vedi Confronto booleano
bitwise_and & Valore del campo bit di confronto

Attualmente l'Expression Builder supporta solo gli operatori inglesi.

Un'espressione può contenere una combinazione di operatori inglesi e di tipo C. Ad esempio, ip.src eq 93.184.216.34 equivale a ip.src == 93.184.216.34.

Determinati operatori di confronto si applicano a campi specifici in base al tipo. La seguente matrice fornisce gli esempi di quali operatori sono disponibili per i diversi tipi di campo:

Operatori di confronto per i campi
Inglese Simile a C Stringa Indirizzo IP Numero
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
lt < 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

=

Maggiore o uguale a cf.threat_score ge 60
contains http.request.uri.path contains "/articles/"
corrisponde ~ http.request.uri.path ~ " [^/articles/2007-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}

La valutazione delle espressioni utilizzando i valori stringa è sensibile al minuscolo/maiuscolo. Pertanto, una regola personalizzata potrebbe richiedere la definizione di più di una condizione di verifica. I clienti Enterprise possono utilizzare un'espressione regolare con l'operatore matches per acquisire più variazioni con una singola espressione.

Confronto booleano

Per i campi di tipo booleano (ad esempio, ssl), il campo compare da solo nell'espressione quando viene valutata una condizione true. Per una condizione false, viene applicato l'operatore not.

Confronto booleano
Vero False
ssl not ssl

Espressioni composte

Puoi creare le espressioni composte raggruppando due o più singole espressioni utilizzando gli operatori logici.

Espressioni composte
Inglese Simile a C Descrizione Esempio Precedenza
not ! NOT logico not ( http.host eq "www.example.com" and ip.src in 93.184.216.0/24 ) 1
e && AND logico http.host eq "www.example.com" and ip.src in 93.184.216.0/24 2
xor ^^ XOR logico http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 3
oppure OR logico

Per modificare l'ordine di precedenza, puoi raggruppare le espressioni con le parentesi. Senza utilizzare le parentesi, le espressioni vengono raggruppate implicitamente in base alla precedenza standard:

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

Applicazione del raggruppamento esplicito:

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

Dare la precedenza o utilizzare le parentesi:

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

Tieni presente che mentre not viene utilizzato per il raggruppamento, può essere utilizzato per negare un singolo confronto. Ad esempio, not ip.src eq 93.184.216.0 equivale a not (ip.src eq 93.184.216.0).

Infine, puoi anche negare le espressioni raggruppate:

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

Deviazioni dai filtri di visualizzazione Wireshark

Le espressioni delle regole personalizzate si ispirano ai filtri di visualizzazione di Wireshark. Tuttavia, l'implementazione si discosta nei seguenti modi:

  • Per i test di uguaglianza IP CIDR, Wireshark consente intervalli nel formato ip.src == 1.2.3.0/24, mentre CIS supporta solo i test di uguaglianza che utilizzano un singolo indirizzo IP. Per confrontare un CIDR, utilizza l'operatore in; ad esempio, ip.src in {1.2.3.0/24}.
  • In Wireshark, ssl è un campo del protocollo contenente centinaia di altri campi di diversi tipi disponibili per il confronto in più modi. Tuttavia, nelle regole personalizzate, “ ssl ” è un singolo campo booleano utilizzato per determinare se la connessione dal client a CIS è crittografata.
  • L'operatore slice non è supportato.
  • Non tutte le funzioni sono supportate. len(), e count() non sono attualmente supportati.

Limiti di espressione

Alle espressioni delle regole si applicano le seguenti limitazioni:

  • Un'espressione di regola può contenere fino a 4.096 caratteri.

    Se si utilizza l'Expression Builder nell'interfaccia utente, lo stesso limite si applica all'anteprima dell'espressione generata.

  • Un'espressione di regola può contenere al massimo 64 espressioni regolari (regex).