beginsWith

Descripción: Coincide si la cadena del parámetro aparece al inicio de la entrada. Admite expansión de macros para coincidencia dinámica de cadenas.

Ejemplo:

# Block requests that don't start with GET
SecRule REQUEST_LINE "!@beginsWith GET" "id:149,deny,log"
# Check if URI starts with /admin
SecRule REQUEST_URI "@beginsWith /admin" "id:151,deny"

contains

Descripción: Coincide si la cadena del parámetro se encuentra en cualquier parte de la entrada. Admite expansión de macros para coincidencia dinámica de cadenas.

Ejemplo:

# Detect PHP files in request line
SecRule REQUEST_LINE "@contains .php" "id:150,deny,log"
# Check if URI contains admin
SecRule REQUEST_URI "@contains admin" "id:151,deny"

detectSQLi

Descripción: Detecta ataques de inyección SQL utilizando la biblioteca libinjection. Devuelve verdadero si se encuentra una carga útil de inyección SQL en la entrada. Captura la huella de SQLi en el campo 0 para registro y análisis.

Ejemplo:

# Detect SQLi in query string
SecRule ARGS "@detectSQLi" "id:185,deny,log,msg:'SQL Injection Detected'"
# Check request body for SQLi
SecRule REQUEST_BODY "@detectSQLi" "id:186,deny"

detectXSS

Descripción: Detecta ataques de Cross-Site Scripting (XSS) utilizando la biblioteca libinjection. Devuelve verdadero si se encuentra una carga útil de XSS en la entrada. Utiliza coincidencia avanzada de patrones para identificar vectores de XSS.

Ejemplo:

# Detect XSS in request parameters
SecRule ARGS "@detectXSS" "id:187,deny,log,msg:'XSS Attack Detected'"
# Check request body for XSS
SecRule REQUEST_BODY "@detectXSS" "id:188,deny"

endsWith

Descripción: Coincide si la cadena del parámetro aparece al final de la entrada. Admite expansión de macros para coincidencia dinámica de cadenas.

Ejemplo:

# Block requests that don't end with HTTP/1.1
SecRule REQUEST_LINE "!@endsWith HTTP/1.1" "id:152,deny,log"
# Check if filename ends with .exe
SecRule REQUEST_FILENAME "@endsWith .exe" "id:154,deny"

eq

Descripción: Realiza una comparación numérica y devuelve verdadero si el valor de entrada es igual al parámetro proporcionado. Ambos valores se convierten a enteros antes de la comparación. Admite expansión de macros para comparación dinámica.

Ejemplo:

# Check if request header count is exactly 15
SecRule &REQUEST_HEADERS_NAMES "@eq 15" "id:153,deny,log"
# Compare parameter value to expected number
SecRule ARGS:quantity "@eq 100" "id:154,pass"

ge

Descripción: Devuelve verdadero si el valor de entrada es mayor o igual que el parámetro proporcionado. Ambos valores se convierten a enteros antes de la comparación. Admite expansión de macros para comparación dinámica.

Ejemplo:

# Block if too many request headers
SecRule &REQUEST_HEADERS_NAMES "@ge 15" "id:155,deny,log"
# Check minimum value requirement
SecRule ARGS:age "@ge 18" "id:156,pass"

gt

Descripción: Devuelve verdadero si el valor de entrada es mayor que el parámetro del operador. Ambos valores se convierten a enteros antes de la comparación. Admite expansión de macros para comparación dinámica.

Ejemplo:

# Deny if request header count exceeds limit
SecRule &REQUEST_HEADERS_NAMES "@gt 15" "id:158,deny,log"
# Check if quantity exceeds threshold
SecRule ARGS:count "@gt 100" "id:159,deny"

inspectFile

Descripción: Ejecuta un programa externo para cada variable en la lista de destinos. Útil para integrar herramientas de validación externas (escáneres de virus, analizadores de contenido, etc.). El programa recibe el valor de la variable como argumento de línea de comandos y tiene un tiempo de espera de 10 segundos.

Ejemplo:

# Scan uploaded files with external antivirus
SecRule FILES_TMPNAMES "@inspectFile /usr/local/bin/av-scan.sh" "id:203,deny,log,msg:'Virus detected'"
# Custom content validation script
SecRule REQUEST_BODY "@inspectFile /opt/waf/scripts/validate-content.py" "id:204,deny"

ipMatch

Descripción: Realiza coincidencia rápida de direcciones IPv4 o IPv6 con soporte para notación CIDR. Puede coincidir con IPs individuales o rangos de IPs. Añade automáticamente las máscaras de subred apropiadas (/32 para IPv4, /128 para IPv6) cuando no se especifican.

Ejemplo:

# Block specific IPs and ranges
SecRule REMOTE_ADDR "@ipMatch 192.168.1.100,192.168.1.50,10.10.50.0/24" "id:160,deny,log"
# Allow internal network
SecRule REMOTE_ADDR "@ipMatch 10.0.0.0/8,172.16.0.0/12" "id:161,pass"

le

Descripción: Devuelve verdadero si el valor de entrada es menor o igual que el parámetro del operador. Ambos valores se convierten a enteros antes de la comparación. Admite expansión de macros para comparación dinámica.

Ejemplo:

# Allow requests with reasonable header count
SecRule &REQUEST_HEADERS_NAMES "@le 15" "id:164,pass,log"
# Check maximum value constraint
SecRule ARGS:limit "@le 100" "id:165,pass"

lt

Descripción: Devuelve verdadero si el valor de entrada es menor que el parámetro del operador. Ambos valores se convierten a enteros antes de la comparación. Admite expansión de macros para comparación dinámica.

Ejemplo:

# Ensure header count stays below threshold
SecRule &REQUEST_HEADERS_NAMES "@lt 15" "id:166,pass,log"
# Check value is under limit
SecRule ARGS:quantity "@lt 1000" "id:167,pass"

noMatch

Descripción: Fuerza que la regla siempre devuelva falso, deshabilitando efectivamente la coincidencia de la regla de forma incondicional. Útil para deshabilitar temporalmente reglas sin eliminarlas, o para reglas que solo ejecutan acciones sin necesidad de coincidir.

Ejemplo:

# Disabled rule that never matches
SecRule ARGS "@noMatch" "id:205,deny,log,msg:'This rule will never fire'"
# Rule that only executes actions without matching
SecRule REQUEST_URI "@noMatch" "id:206,pass,setvar:tx.test=1"

pm

Descripción: Realiza coincidencia de patrones sin distinción de mayúsculas utilizando el algoritmo Aho-Corasick para una búsqueda eficiente de múltiples patrones. Coincide con palabras clave o patrones separados por espacios proporcionados como argumentos.

Ejemplo:

# Detect known malicious user agents
SecRule REQUEST_HEADERS:User-Agent "@pm WebZIP WebCopier Webster" "id:170,deny,log"
# Match multiple attack patternsonerror=" "id:171,deny"

rbl

Descripción: Busca la dirección IP de entrada en el servicio RBL (lista de bloqueo en tiempo real) especificado. Realiza consultas DNS para verificar si la IP está en la lista. Establece la variable TX.httpbl_msg con el texto de respuesta si se encuentra. Tiene un tiempo de espera de 500 ms para las consultas DNS.

Ejemplo:

# Check IP against Spamhaus blocklist
SecRule REMOTE_ADDR "@rbl sbl-xbl.spamhaus.org" "id:183,deny,log,msg:'IP found in RBL'"
# Multiple RBL checks
SecRule REMOTE_ADDR "@rbl dnsbl.example.com" "id:184,deny"

restpath

Descripción: Toma una expresión de ruta con marcadores de posición y la transforma en una expresión regular para la validación de endpoints REST. Extrae parámetros de ruta de la URI y los almacena en la colección ARGS_PATH para su uso en reglas. Útil para validar endpoints de API REST con segmentos de ruta dinámicos.

Ejemplo:

# Match REST endpoint and extract path parameters
SecRule REQUEST_URI "@restpath /api/v1/users/{userId}/posts/{postId}" "id:201,pass,log"
# Validate extracted path parameter
SecRule ARGS_PATH:userId "@rx ^[0-9]+$" "id:202,deny,msg:'Invalid user ID format'"

rx

Descripción: Realiza coincidencia de patrones de expresión regular utilizando la sintaxis RE2. Este es el operador por defecto si no se especifica el prefijo @. Admite grupos de captura (hasta 9) para su uso en acciones de regla. Por defecto habilita el modo dotall (?s) donde . coincide con saltos de línea para compatibilidad con ModSecurity.

Ejemplo:

# Match User-Agent containing "nikto" (with explicit @rx)
SecRule REQUEST_HEADERS:User-Agent "@rx nikto" "id:180,deny,log"
# Implicit operator usage (same as @rx)
SecRule ARGS "(?i)union.*select" "id:181,deny"
# Capture groups for reuse in actions
SecRule REQUEST_URI "@rx ^/api/v(\d+)" "id:182,setvar:tx.api_version=%{TX.1}"

streq

Descripción: Realiza una comparación de cadenas y devuelve verdadero si la cadena del parámetro es idéntica a la cadena de entrada. Este es un operador de coincidencia exacta sensible a mayúsculas. Admite expansión de macros para coincidencia dinámica de cadenas.

Ejemplo:

# Block if foo parameter is not exactly "bar"
SecRule ARGS:foo "!@streq bar" "id:176,deny,log"
# Check if request method is exactly POST
SecRule REQUEST_METHOD "@streq POST" "id:177,deny"

unconditionalMatch

Descripción: Fuerza que la regla siempre devuelva verdadero, coincidiendo incondicionalmente y ejecutando todas las acciones asociadas. Útil para reglas que siempre deben ejecutar sus acciones independientemente de la entrada, como establecer variables, registrar o realizar tareas de inicialización.

Ejemplo:

# Always execute action to set variable
SecRule REMOTE_ADDR "@unconditionalMatch" "id:207,phase:1,pass,nolog,setvar:tx.initialized=1"
# Force rule to always match and log
SecRule REQUEST_URI "@unconditionalMatch" "id:208,pass,log,msg:'Request logged'"

validateByteRange

Descripción: Valida que los valores de bytes utilizados en la entrada estén dentro del rango o rangos especificados. Devuelve verdadero (violación) si se encuentra algún byte fuera de los rangos permitidos. Útil para detectar datos binarios, caracteres de control o restringir conjuntos de caracteres.

Ejemplo:

# Allow only printable ASCII characters
SecRule ARGS "@validateByteRange 10, 13, 32-126" "id:189,deny,log,msg:'Invalid characters'"
# Detect null bytes
SecRule REQUEST_URI "@validateByteRange 1-255" "id:190,deny"

validateNid

Descripción: Valida que la entrada contenga un identificador nacional válido para el país especificado. Utiliza algoritmos de validación específicos del país (verificación Luhn, reglas de formato, etc.). Admite múltiples códigos de país con patrones regex personalizados.

Ejemplo:

# Validate Chilean RUT format
SecRule ARGS:rut "@validateNid cl ^[0-9]{7,8}-[0-9Kk]$" "id:195,pass,log"
# Reject invalid Chilean national IDs
SecRule ARGS:nid "!@validateNid cl ^[0-9]{7,8}-[0-9Kk]$" "id:196,deny,msg:'Invalid RUT'"

validateSchema

Descripción: Valida los cuerpos de solicitud o respuesta JSON contra una especificación de JSON Schema. Obtiene automáticamente los datos JSON de las variables TX (json_request_body o json_response_body) según la fase actual. Devuelve verdadero si la validación falla (violación del esquema).

Ejemplo:

# Validate request body against API schema
SecRule REQUEST_BODY "@validateSchema /schemas/api-request.json" "id:197,deny,log,phase:2"
# Validate response body schema
SecRule RESPONSE_BODY "@validateSchema /schemas/api-response.json" "id:198,log,phase:4"

validateURLEncoding

Descripción: Valida los caracteres codificados en URL en la cadena de entrada. Comprueba que la codificación porcentual siga el formato correcto (%XX donde X es un dígito hexadecimal). Devuelve verdadero si se detecta una codificación inválida (caracteres no hexadecimales o secuencias incompletas).

Ejemplo:

# Ensure proper URL encoding in request URI
SecRule REQUEST_URI_RAW "@validateUrlEncoding" "id:191,deny,log,msg:'Invalid URL encoding'"
# Check query string encoding
SecRule QUERY_STRING "@validateUrlEncoding" "id:192,deny"

validateUtf8Encoding

Descripción: Comprueba si la entrada es una cadena codificada en UTF-8 válida. Detecta problemas de codificación, secuencias mal formadas y codificaciones excesivamente largas. Útil para prevenir ataques de validación de UTF-8 y garantizar una codificación de caracteres correcta.

Ejemplo:

# Ensure valid UTF-8 in request parameters
SecRule ARGS "@validateUtf8Encoding" "id:193,deny,log,msg:'Invalid UTF-8 encoding'"
# Check request body encoding
SecRule REQUEST_BODY "@validateUtf8Encoding" "id:194,deny"

within

Descripción: Devuelve verdadero si el valor de entrada (la aguja) se encuentra en cualquier parte dentro del parámetro @within (el pajar). Es el inverso de contains - comprueba si la entrada está contenida en la lista del parámetro. Admite expansión de macros para coincidencia dinámica.

Ejemplo:

# Allow only specific HTTP methods
SecRule REQUEST_METHOD "!@within GET,POST,HEAD" "id:178,deny,log"
# Check if parameter value is in allowed list
SecRule ARGS:action "@within view,list,search" "id:179,pass"