Flujo de ejecución
Fases
Las fases son un concepto abstracto diseñado para adaptarse a la mayoría de los flujos de ejecución de servidores web y ofrecer más oportunidades para detener una solicitud.
Fase 1: Cabeceras de solicitud
Esta fase procesará las reglas con las siguientes variables:
- Datos de conexión HTTP, como direcciones IP, puertos y versión del protocolo
- URI y argumentos GET
- Cabeceras de solicitud: cookies, content-type y content-length
Fase 2: Cuerpo de la solicitud
Esta fase procesará las reglas con las siguientes variables:
- Argumentos POST
- Argumentos multipart y archivos
- Datos JSON y XML
- Cuerpo crudo de la solicitud (Raw Request Body)
Fase 3: Cabeceras de respuesta
Esta fase procesará las reglas con las siguientes variables:
- Código de estado de la respuesta
- Cabeceras de respuesta: content-length y content-type
Fase 4: Cuerpo de la respuesta
Esta fase procesará las reglas con las siguientes variables:
- Cuerpo crudo de la respuesta (Raw Response Body)
Fase 5: Registro
Esta fase evaluará las reglas de la fase 5, guardará las colecciones persistentes y escribirá la entrada de registro. Esta fase no es disruptiva y puede ejecutarse después de que la respuesta haya sido enviada al cliente.
Cómo se ordenan las reglas
Las reglas no se ordenan por ID, sino por fase y orden de compilación. Por ejemplo:
SecAction "id:1,phase:3,logdata:'first rule',log"
SecAction "id:150,phase:2,logdata:'second rule',log"
SecAction "id:300,phase:1,logdata:'third rule',log"Esto evaluará las reglas según su fase, no según su ID, y mostrará el siguiente logdata:
third rule
second rule
first ruleSecmarkers
SecMarker es una directiva que crea una regla abstracta, sin reglas, operadores ni acciones, que solo funciona como marcador de posición para indicar a la transacción bajo qué SecMarker nos encontramos.
SecMarker BEGIN_HOST_CHECK
SecRule &REQUEST_HEADERS:Host "@eq 0" "phase:1,id:1,pass"
SecRule REQUEST_HEADERS:Host "^$" "phase:1,id:2,pass"
SecMarker END_HOST_CHECKEsto “marcará” las reglas 1 y 2 como BEGIN_HOST_CHECK, que será utilizado por la acción
skipAfter para saltar las reglas siguientes hasta que se alcance el “SecMarker” indicado, por ejemplo:
SecAction "id:1, phase:1,skipAfter:END_HOST_CHECK"
SecMarker BEGIN_HOST_CHECK
SecRule &REQUEST_HEADERS:Host "@eq 0" "phase:1,id:2,pass"
SecRule REQUEST_HEADERS:Host "^$" "phase:1,id:3,pass"
SecMarker END_HOST_CHECK
SecAction "id:4,phase:1,pass"En el ejemplo anterior, las reglas 2 y 3 serán omitidas porque están marcadas como BEGIN_HOST_CHECK y no como END_HOST_CHECK, que es lo esperado por skipAfter.
Otros controladores de flujo
La acción Skip también puede utilizarse para saltar las N reglas siguientes, por ejemplo:
SecAction "id:1,phase:1, skip:1"
# The following rule won't be evaluated
SecAction "id:2"
# This rule will be evaluated
SecAction "id:3"