Las expresiones de reglas usan operadores de comparación para coincidir con los valores de las solicitudes y operadores lógicos para combinar condiciones.
Operadores de comparación
Los operadores de comparación comparan el valor de una solicitud entrante con un valor especificado en una expresión.
contains
Comprueba si el valor de la solicitud contiene la cadena especificada.
Nombre del operador:
ContainsTipo de valor:
String-
Ejemplo:
(http.host contains "example.com")
ends_with
Comprueba si el valor de la solicitud termina con la cadena especificada.
Nombre del operador:
Ends withTipo de valor:
String-
Ejemplo:
(ends_with(http.host, "cn"))
eq
Comprueba si el valor de la solicitud es igual al valor especificado.
Nombre del operador:
Equal toTipo de valor:
String-
Ejemplo:
(http.host eq "www.example.com")
exists
Comprueba si un campo o atributo específico existe en la solicitud.
Nombre del operador:
ExistsTipo de valor:
String-
Ejemplo:
(exists(http.request.headers["user-agent"]))
ge
Comprueba si el valor de la solicitud es mayor o igual que el valor numérico especificado.
Nombre del operador:
Greater than or equal toTipo de valor:
int-
Ejemplo:
(ip.geoip.asnum ge 45104)
gt
Comprueba si el valor de la solicitud es mayor que el valor numérico especificado.
Nombre del operador:
Greater thanTipo de valor:
int-
Ejemplo:
(ip.geoip.asnum gt 45104)
in
Comprueba si el valor de la solicitud coincide con algún valor de un conjunto especificado. Use el símbolo $ para hacer referencia a una lista.
Nombre del operador:
Is inTipo de valor:
Array-
Ejemplo:
(http.host in {"www.example.com" "blog.example.com"})( ip.src in $<LIST_NAME>)
le
Comprueba si el valor de la solicitud es menor o igual que el valor numérico especificado.
Nombre del operador:
Less than or equal toTipo de valor:
int-
Ejemplo:
(ip.geoip.asnum le 45104)
len eq
Comprueba si la longitud del valor de la solicitud es igual al valor numérico especificado.
Nombre del operador:
Length equalsTipo de valor:
String-
Ejemplo:
(len(http.request.cookies["session"]) eq 330688)
len gt
Comprueba si la longitud del valor de la solicitud es mayor que el valor numérico especificado.
Nombre del operador:
Length is greater thanTipo de valor:
String-
Ejemplo:
(len(http.request.cookies["session"]) gt 330688)
len lt
Comprueba si la longitud del valor de la solicitud es menor que el valor numérico especificado.
Nombre del operador:
Length is less thanTipo de valor:
String-
Ejemplo:
(len(http.request.cookies["session"]) lt 330688)
lt
Comprueba si el valor de la solicitud es menor que el valor numérico especificado.
Nombre del operador:
Less thanTipo de valor:
int-
Ejemplo:
(ip.geoip.asnum lt 45104)
matches
Comprueba si el valor de la solicitud coincide con una expresión regular especificada (compatible con PCRE).
Solo los planes Premium y Enterprise son compatibles con expresiones regulares.
Nombre del operador:
Matches regexTipo de valor:
String-
Ejemplo:
(http.host matches "(www|blog)\.example\.com")
ne
Comprueba si el valor de la solicitud no es igual al valor especificado.
Nombre del operador:
Not equal toTipo de valor:
String-
Ejemplo:
(http.host ne "www.example.com")
not ends_with
Comprueba si el valor de la solicitud no termina con la cadena especificada.
Nombre del operador:
Does not end withTipo de valor:
String-
Ejemplo:
(not ends_with(http.host, "cn"))
not exists
Comprueba si un campo o atributo específico no existe en la solicitud.
Nombre del operador:
Does not existTipo de valor:
String-
Ejemplo:
(not exists(http.request.headers["user-agent"]))
not starts_with
Comprueba si el valor de la solicitud no empieza con la cadena especificada.
Nombre del operador:
Does not start withTipo de valor:
String-
Ejemplo:
(not starts_with(http.host, "blog"))
not...contains
Comprueba si el valor de la solicitud no contiene la cadena especificada.
Nombre del operador:
Does not containTipo de valor:
String-
Ejemplo:
(not http.host contains "example.com")
not...in
Comprueba si el valor de la solicitud no coincide con ningún valor de un conjunto especificado. Use el símbolo $ para hacer referencia a una lista.
Nombre del operador:
Is not inTipo de valor:
Array-
Ejemplo:
(not http.host in {"www.example.com" "blog.example.com"})(not ip.src in $<LIST_NAME>)
not...matches
Comprueba si el valor de la solicitud no coincide con una expresión regular especificada (compatible con PCRE).
Solo los planes Premium y Enterprise son compatibles con expresiones regulares.
Nombre del operador:
Does not match regexTipo de valor:
String-
Ejemplo:
(not http.host matches "(www|blog)\.example\.com")
percent
Filtra las solicitudes según un campo y un valor porcentual especificados.
Nombre del operador:
PercentageTipo de valor:
IntRango de valores: de 1 a 100
Si el valor del campo está vacío (por ejemplo, la solicitud no incluye el encabezado especificado), la regla no surte efecto y el resultado de la coincidencia es false.
Campos compatibles:
Encabezado:
http.request.headers["example"]IP del cliente:
ip.srcCadena de consulta del URI:
http.request.uri.args["example"]Marca de tiempo de la solicitud:
http.request.timestamp.sec
Ejemplos:
percent(http.request.headers["example"],80)percent(ip.src,80)percent(http.request.cookies["example"],80)percent(http.request.args["example"],80)percent(http.request.timestamp.sec,80)
starts_with
Comprueba si el valor de la solicitud empieza con la cadena especificada.
Nombre del operador:
Starts withTipo de valor:
String-
Ejemplo:
(starts_with(http.host, "blog"))
Otros operadores
lower
Convierte el valor de la solicitud a minúsculas para habilitar coincidencias sin distinción entre mayúsculas y minúsculas.
Nombre del operador:
Case-insensitiveTipo de valor:
String-
Ejemplo:
(lower(http.request.uri))
Operadores lógicos
Los operadores lógicos combinan varias expresiones en una composite expression.
and
Devuelve verdadero solo cuando todas las expresiones combinadas son verdaderas.
Nombre del operador:
Logical AND-
Ejemplo:
((http.host eq "www.example.com") and (ip.geoip.country eq "CN"))
not
Niega el resultado de una expresión e invierte verdadero a falso y viceversa.
Nombre del operador:
Logical NOT-
Ejemplo:
not (http.host eq "www.example.com")
or
Devuelve verdadero si alguna de las expresiones combinadas es verdadera.
Nombre del operador:
Logical OR-
Ejemplo:
((http.host eq "www.example.com") or (ip.geoip.country eq "CN"))
Símbolos de agrupación
Use los paréntesis ( y ) para agrupar partes de una expresión y controlar el orden de evaluación.
Los símbolos de agrupación son compatibles con el editor de expresiones y la API de ESA, pero no con el generador de expresiones.
Ejemplo de expresión anidada:
(http.host eq "www.example.com" and ((http.referer in {"download.example.com"}) or (http.referer in {"image.example.com"})))