Felder, Funktionen und Ausdrücke verwenden
Neben Aktionen bilden Felder und Ausdrücke die Bausteine für benutzerdefinierte WAF-Regeln. Diese Elemente arbeiten zusammen, um die Kriterien für die Übereinstimmung einer benutzerdefinierten Regel zu definieren.
Felder
Wenn CIS eine HTTP Anfrage erhält, analysiert es die Anfrage und erstellt eine Tabelle mit Feldern für den Abgleich. Diese Feldtabelle existiert nur, während die Anfrage bearbeitet wird, und enthält die Anfrageeigenschaften, die für den Ausdrucksabgleich verwendet werden.
Die einzelnen Feldwerte können aus verschiedenen Bereichen bezogen werden, z. B.:
- Primitive Eigenschaften, die direkt aus dem Datenverkehr abgerufen werden, zum Beispiel
http.request.uri.path. - Abgeleitete Werte, die sich aus einer Transformation, Zusammensetzung oder Basisoperation ergeben, z. B. den Wert von
http.request.uri.pathin Kleinbuchstaben und als Feld eines anderen Felds verfügbar machen. - Computerwerte, die sich aus einer Suche, einer Berechnung oder anderem geschäftsrelevantem Wissen ergeben, beispielsweise eine Bedrohungsbewertung (
cf.threat_score), die dynamisch durch einen maschinellen Lernprozess berechnet wurde, bei dem zugehörige primitive und abgeleitete Werte untersucht wurden.
Verfügbare Felder
| Feldname | Typ | Beispielwert | Anmerkungen |
|---|---|---|---|
| http.cookie | Zeichenfolge | session=A12345;-background=light | Vollständiges Cookie als Zeichenfolge |
| http.host | Zeichenfolge | www.example.com |
Der in der vollständigen Anfrage-URI verwendete Hostname |
| http.referer | Zeichenfolge | HTTP-Referer-Header | Der HTTPrequest Referer-Header, der die Adresse der Webseite enthält, die auf die aktuell angeforderte Seite verlinkt. |
| http.request.body.raw | Zeichenfolge | Der unveränderte HTTP Anfragetext. | |
| http.request.full_uri | Zeichenfolge | https://www.example.com/articles/index?section=539061&expand=comments |
Der vollständige URI, wie vom Web-Server empfangen (schließt nicht #fragment ein, das nicht an Web-Server gesendet wird) |
| http.request.method | Zeichenfolge | POST | Die Methode HTTP, in Großbuchstaben |
| http.request.uri | Zeichenfolge | /articles/index?section=539061&expand=comments | Der absolute URI der Anforderung |
| http.request.uri.path | Zeichenfolge | /articles/index | Der Pfad der Anforderung |
| http.request.uri.query | Zeichenfolge | section=539061&expand=comments | Die gesamte Abfragezeichenfolge ohne das Begrenzungspräfix "?" |
| http.user_agent | Zeichenfolge | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/65.0.3325.181 Safari/537.36 | Der gesamte HTTP-Benutzeragent |
| http.x_forwarded_for | Zeichenfolge | Der vollständige HTTP-Header 'X-Forwarded-For' | |
| ip.src | IP-Adresse | 93.155.208.22 | Die IP-Adresse des Client- TCP s, die gegebenenfalls an die tatsächliche IP-Adresse des ursprünglichen Clients angepasst werden kann (beispielsweise durch Verwendung von HTTP-Headern wie X-Forwarded-For oder X-Real-IP) |
| ip.src.region | Zeichenfolge | Texas | Die Geolokalisierungsregion, die der IP-Adresse der eingehenden Anfrage zugeordnet ist. |
| ip.geoip.asnum | Zahl | 222 | Die Nummer des Autonomous System (AS) |
| ip.geoip.country | Zeichenfolge | GB | Der aus zwei Buchstaben bestehende Ländercode |
| ssl | Boolescher Wert | Ja | Gibt an, ob die HTTP-Verbindung zum Client verschlüsselt ist |
| ip.src.subdivision_1_iso_code | Zeichenfolge | GB-DE | Der ISO 3166-2 code für die mit der IP-Adresse verbundene Region der ersten Ebene. Wenn der aktuelle Wert nicht verfügbar ist, enthält
dieses Feld eine leere Zeichenfolge. Zur Nutzung dieses Feldes ist ein CIS Enterprise-Tarif erforderlich. |
| ip.src.subdivision_2_iso_code | Zeichenfolge | GB-SWK | Der ISO 3166-2 code für die mit der IP-Adresse verbundene Region der zweiten Ebene. Wenn der aktuelle Wert nicht verfügbar ist, enthält
dieses Feld eine leere Zeichenfolge. Zur Nutzung dieses Feldes ist ein CIS Enterprise-Tarif erforderlich. |
| ip.src.is_in_european_union | Boolescher Wert | Für weitere Informationen siehe ip.src.is_in_european_union. |
Diese Standardfelder folgen der Namenskonvention der Wireshark-Referenz für Anzeigefelder. Die oben angegebenen Beispielwerte können jedoch geringfügige Abweichungen enthalten.
Zusätzlich zu den Standardfeldern sind die folgenden, von Cloudflare definierten Felder verfügbar:
| Feldname | Typ | Beispielwert | Anmerkungen |
|---|---|---|---|
| cf.client.bot | Boolescher Wert | Ja | Unabhängig davon, ob die Anfrage von einem bekannten Bot oder Crawler stammt, und unabhängig davon, ob die Absicht gut oder böse ist. |
| cf.threat_score | Zahl | 0 | Dieses Feld zeigt eine Cloudflare-Bedrohungsbewertung an. Zuvor stellte ein Bedrohungswert einen Cloudflare-Bedrohungswert von 0-100 dar, wobei 0 für ein geringes Risiko stand. Jetzt ist der Bedrohungswert immer 0 (Null). |
| cf.waf.score | Zahl | 1–99 | Auf maschinellem Lernen basierende Bewertung, die die Wahrscheinlichkeit einer bösartigen Anfrage einschätzt. Die Punktzahl reicht von 1 (höchstwahrscheinlich bösartig) bis 99 (höchstwahrscheinlich sicher). Niedrige Punktzahlen bedeuten ein höheres Risiko. Nützlich für die Erstellung schwellenwertbasierter Firewall-Regeln. |
| cf.ray_id | Zeichenfolge | Es handelt sich um eine Kennung, die jeder Anfrage, die über Cloudflare läuft, zugewiesen wird. | |
| cf.edge.server_ip | IP-Adresse | In diesem Feld wird die IP-Adresse des globalen Netzes angegeben, zu der die Anfrage HTTP aufgelöst wurde. Dieses Feld ist nur für BYOIP-Kunden von Bedeutung. | |
| cf.edge.server_port | IP-Adresse | 1-65535 | Dieses Feld zeigt die Portnummer an, an der das globale Cloudflare-Netzwerk die Anfrage erhalten hat. Verwenden Sie dieses Feld, um den Verkehr an einem bestimmten Port zu filtern. |
| cf.tls_cipher | Zeichenfolge | AES128-SHA256 | Die Chiffre für die Verbindung zu Cloudflare. |
| cf.tls_version | Zeichenfolge | TLSv1.2 | Die TLS Version der Verbindung zu Cloudflare. |
ip.src.is_in_european_union
Der Antrag stammt aus einem Land der Europäischen Union (EU) und erfordert einen CIS Enterprise Plan.
In der folgenden Tabelle sind die EU-Länder aufgeführt, für die Geolokalisierungsdaten vorliegen:
| Landeskennzahl | Landesname |
|---|---|
AT |
Österreich |
AX |
Åland |
BE |
Belgien |
BG |
Bulgarien |
CY |
Zypern |
CZ |
Tschechien |
GE |
Deutschland |
DK |
Dänemark |
EE |
Estland |
ES |
Spanisch |
FI |
Finnland |
FR |
Frankreich |
GF |
Französisch-Guayana |
GP |
Guadeloupe |
GR |
Griechenland |
HR |
Kroatien |
HU |
Ungarn |
IE |
Irland |
IT |
Italien |
LT |
Litauen |
LU |
Luxemburg |
LV |
Lettland |
MF |
Saint Martin |
MQ |
Martinique |
MT |
Malta |
NL |
Niederlande |
PL |
Polen |
PT |
Portugal |
RE |
Réunion |
RO |
Rumänien |
SE |
Schweden |
SI |
Slowenien |
SK |
Slowakei |
YT |
Mayotte |
Bot-Management-Felder
Bot Management for Enterprise ist ein kostenpflichtiges Add-on, das einen ausgefeilten Bot-Schutz für Ihre Domain bietet. Kunden können automatisierten Datenverkehr erkennen, entsprechende Maßnahmen ergreifen und detaillierte Analysen in der Konsole anzeigen.
In der folgenden Tabelle finden Sie Informationen zu den verfügbaren Bot-Feldern:
| Feldname | Typ | Anmerkungen |
|---|---|---|
cf.client.bot |
Boolescher Wert | Dieses Feld gibt an, ob die Anforderung von einem bekannten Bot oder Crawler stammt, wobei die Absicht gut oder schlecht sein kann. |
cf.bot_management.verified_bot |
Boolescher Wert | Zeigt an, ob die Anfrage von einem bekannt guten Bot oder Crawler stammt und liefert die gleichen Informationen wie cf.client.bot. Dieses Feld ist bei CIS Enterprise-Tarif mit aktivierter Bot-Verwaltung verfügbar. |
cf.bot_management.corporate_proxy |
Boolescher Wert | Dieses Feld zeigt an, ob die eingehende Anfrage von einem identifizierten Enterprise-Only-Cloud-basierten Unternehmens-Proxy oder einem sicheren Web-Gateway stammt. Dieses Feld ist bei CIS Enterprise-Tarif mit aktivierter Bot-Verwaltung verfügbar. |
cf.bot_management.detection_ids |
Zahl | In diesem Feld werden die IDs der heuristischen Erkennungen des Bot Managements für eine Anfrage aufgeführt. Verwenden Sie dieses Feld, um bestimmte Heuristiken in einer Regel zu berücksichtigen oder auszuschließen. Eine Anfrage kann mehrere Erkennungen haben. |
cf.bot_management.ja3_hash |
Zeichenfolge | Dieses Feld enthält einen SSL / TLS Fingerabdruck, der Ihnen hilft, potenzielle Bot-Anfragen zu identifizieren. Weitere Informationen finden Sie unter JA3/JA4 Fingerabdruck. Um dieses Feld zu verwenden, ist ein CIS Enterprise-Tarif mit aktivierter Bot-Verwaltung erforderlich. |
cf.bot_management.ja4 |
Zeichenfolge | Dieses Feld enthält einen SSL / TLS Fingerabdruck, der Ihnen hilft, potenzielle Bot-Anfragen zu identifizieren. Weitere Informationen finden Sie unter JA3/JA4 Fingerabdruck. Um dieses Feld zu verwenden, ist ein CIS Enterprise-Tarif mit aktivierter Bot-Verwaltung erforderlich. |
cf.bot_management.js_detection.passed |
Boolescher Wert | Zeigt an, ob der Besucher zuvor eine JS Detection bestanden hat. Weitere Informationen finden Sie unter JavaScript detections. Um dieses Feld zu verwenden, ist ein CIS Enterprise-Tarif mit aktivierter Bot-Verwaltung erforderlich. |
cf.bot_management.score |
Zahl | Dieses Feld gibt die Wahrscheinlichkeit an, dass eine Anfrage von einem Bot stammt, indem es eine Punktzahl von 1-99 verwendet. Eine niedrige Punktzahl bedeutet, dass die Anfrage von einem Bot oder einem automatisierten Agenten stammt. Eine hohe Punktzahl bedeutet, dass ein Mensch die Anfrage gestellt hat. Um dieses Feld zu verwenden, ist ein CIS Enterprise-Tarif mit aktivierter Bot-Verwaltung erforderlich. |
cf.bot_management.static_resource |
Zahl | Gibt an, ob statische Ressourcen einbezogen werden sollen, wenn Sie eine Regel mithilfe von cf.bot_management.score erstellen. Um dieses Feld zu verwenden, ist ein CIS Enterprise-Tarif mit aktivierter Bot-Verwaltung erforderlich. |
cf.verified_bot_category |
Zeichenfolge | Dieses Feld gibt die Art und den Zweck eines verifizierten Bots an. Weitere Informationen finden Sie unter Verifizierte Bot-Kategorien. |
Funktionen
Die Sprache für benutzerdefinierte Regeln verfügt über mehrere Funktionen zur Konvertierung von Feldern.
Diese werden derzeit im Expression Builder nicht unterstützt.
| Funktionsname | Argumenttypen | Rückgabetyp | Anwendungsbeispiel | Anmerkungen |
|---|---|---|---|---|
| unten | Zeichenfolge | Zeichenfolge | lower(http.host) == "www.example.com" |
Konvertiert ein Zeichenfolgefeld in Kleinbuchstaben. Nur ASCII-Byte in Großschreibung werden konvertiert, alle anderen Byte werden unverändert belassen. |
| oben | Zeichenfolge | Zeichenfolge | upper(http.host) == "www.example.com" |
Konvertiert ein Zeichenfolgefeld in Großbuchstaben. Nur ASCII-Byte in Kleinschreibung werden konvertiert, alle anderen Byte werden unverändert belassen. |
Ausdrücke
Ein Ausdruck gibt basierend auf einer Übereinstimmung mit dem eingehenden Datenverkehr den Wert 'true' oder 'false' zurück. Zum Beispiel:
http.host eq "www.example.com" and ip.src in 92.182.212.0/24
Im vorliegenden Beispiel bilden zwei einzelne Ausdrücke einen zusammengesetzten Ausdruck. Stellen Sie sich die einzelnen Ausdrücke als Bedingungen vor. Jede Bedingung wird vor dem Anwenden und der Logik einzeln ausgewertet, um das Endergebnis des zusammengesetzten Ausdrucks zu bestimmen.
Ein genauerer Blick auf den ersten einzelnen Ausdruck zeigt, dass er Folgendes enthält:
- ein Feld –
http.host - einen Vergleichsoperator –
eq - einen Wert –
"www.example.com"
Nicht alle Bedingungen weisen die gleiche Struktur auf. Weitere Beispiele, die andere Strukturen verwenden, werden im nächsten Abschnitt erläutert.
Vergleichsoperatoren
Die folgenden Vergleichsoperatoren sind zur Verwendung in Ausdrücken verfügbar:
| Englisch | C-ähnlich | Beschreibung |
|---|---|---|
| eq | == | Gleich |
| ne | != | Ungleich |
| lt | < | Kleiner als |
| le | <= | Kleiner-gleich |
| gt | Größer als | |
| ge |
|
Größer-gleich |
| enthält | Enthält genau | |
| entspricht | ~ | Von Re2 inspirierter regulärer Ausdruck |
| in | Der Wert wird in einer Gruppe von Werten angezeigt. Unterstützt Bereiche mithilfe der Notation "..". | |
| nicht | ! | Siehe Boolescher Vergleich |
| bitwise_and | & | Bitfeldwert vergleichen |
Derzeit unterstützt der Expression Builder nur englische Operatoren.
Ein Ausdruck kann eine Mischung aus englischen und C-ähnlichen Operatoren enthalten. Beispielsweise ist ip.src eq 93.184.216.34 äquivalent zu ip.src == 93.184.216.34.
Einige Vergleichsoperatoren sind auf der Basis des Typs auf bestimmte Felder anzuwenden. Die folgende Matrix enthält Beispiele dafür, welche Operatoren für die verschiedenen Feldtypen verfügbar sind:
| Englisch | C-ähnlich | Zeichenfolge | IP-Adresse | Zahl |
|---|---|---|---|---|
| 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 |
|
Größer-gleich | cf.threat_score ge 60 | |
| enthält | http.request.uri.path contains "/articles/" | |||
| entspricht | ~ | 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} |
Bei der Auswertung von Ausdrücken mit Zeichenfolgewerten muss die Groß-/Kleinschreibung beachtet werden. Daher kann es bei einer benutzerdefinierten Regel erforderlich sein, dass Sie mehr als eine Testbedingung definieren. Unternehmenskunden können einen regulären Ausdruck mit dem Operator "matches" verwenden, um mehrere Varianten mit einem einzigen Ausdruck zu erfassen.
Boolescher Vergleich
Für Felder des booleschen Typs (z. B. ssl) wird das Feld selbst im Ausdruck angezeigt, wenn eine Auswertung für eine wahre Bedingung erfolgt. Für eine falsche Bedingung wird der Operator not angewendet.
| Ja | Falsch |
|---|---|
| ssl | not ssl |
Zusammengesetzte Ausdrücke
Sie können zusammengesetzte Ausdrücke erstellen, indem Sie mindestens zwei einzelne Ausdrücke mithilfe von logischen Operatoren gruppieren.
| Englisch | C-ähnlich | Beschreibung | Beispiel | Rangfolge |
|---|---|---|---|---|
| nicht | ! | Logisches NICHT | not ( http.host eq "www.example.com" and ip.src in 93.184.216.0/24 ) |
1 |
| und | && | Logisches UND | http.host eq "www.example.com" and ip.src in 93.184.216.0/24 |
2 |
| xor | ^^ | Logisches Exklusiv-Oder (XOR) | http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 |
3 |
| oder | & verbar; & verbar; | Logisches ODER | http.host eq "www.example.com" or ip.src in 93.184.216.0/24 |
4 |
Um die Reihenfolge der Vorrangstellung zu ändern, können Sie Ausdrücke mithilfe von runden Klammern gruppieren. Falls keine runden Klammern verwendet werden, werden Ausdrücke auf der Basis des Standardvorrangs implizit gruppiert:
ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth
Explizite Gruppierung anwenden:
(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth
Vorrang für 'or' mithilfe von runden Klammern einräumen:
ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)
Beachten Sie, dass not zum Gruppieren, aber auch zum Verneinen eines einzelnen Ausdrucks verwendet werden kann. Beispielsweise ist not ip.src eq 93.184.216.0 äquivalent zu not (ip.src eq 93.184.216.0).
Sie können schließlich auch gruppierte Ausdrücke verneinen:
not (http.request.method eq "POST" and http.request.uri.path eq "/login")
Abweichungen von Wireshark-Anzeigefiltern
Benutzerdefinierte Regelausdrücke sind an die Anzeigefilter von Wireshark angelehnt. Die Implementierung weicht jedoch auf folgende Weise ab:
- Bei CIDR-IP-Gleichheitstests ermöglicht Wireshark durch das Format
ip.src == 1.2.3.0/24Bereiche, während CIS nur Gleichheitstests unterstützt, bei denen eine einzelne IP-Adresse verwendet wird. Zum Vergleichen einer CIDR verwenden Sie den Operatorin; Beispiel:ip.src in {1.2.3.0/24}. - In Wireshark ist
sslein Protokollfeld, das Hunderte von anderen Feldern verschiedener Typen enthält, die auf mehrere Arten für Vergleiche verfügbar sind. In benutzerdefinierten Regeln istssljedoch ein einzelnes boolesches Feld, mit dem festgestellt wird, ob die Verbindung vom Client zu CIS verschlüsselt ist. - Der Operator
slicewird nicht unterstützt. - Nicht alle Funktionen werden unterstützt. Derzeit werden
len()undcount()nicht unterstützt.
Einschränkungen bei der Ausdrucksweise
Für Regelausdrücke gelten die folgenden Einschränkungen:
-
Ein Regelausdruck kann bis zu 4.096 Zeichen enthalten.
Wenn Sie den Ausdrucksgenerator in der Benutzeroberfläche verwenden, gilt dieselbe Beschränkung auch für die Vorschau des generierten Ausdrucks.
-
Ein Regelausdruck kann maximal 64 reguläre Ausdrücke (Regex) enthalten.