# Excepciones del WAF

> Apaga una regla del WAF, todas o un escudo en una ruta cuando bloquea tráfico legítimo, sin bajar el nivel de todo el sitio.

Una excepción del WAF es una regla de tipo `waf_exception`: un `rule_id` y un `path_pattern`, que se pueden limitar a algunos nombres de la zona. En las rutas que coinciden, esa regla no suma puntos a la puntuación de anomalía; las demás reglas que coincidieron con la misma petición siguen contando.

## Encontrar el identificador de la regla

Abre la petición bloqueada (o, en modo solo observar, registrada) en los [eventos de seguridad](https://developers.openwaf.dev/es/analytics/security-events/). Su `rule_id` es la regla del WAF que la decidió; por ejemplo, `942100` (una regla de inyección SQL de CRS), `10002` (una regla de OpenWAF) o `1003` (el escudo de redirección abierta).

## Valores de rule_id

| `rule_id` | Efecto en la ruta |
|---|---|
| `0` | Todas las reglas del WAF (OWASP CRS y las de OpenWAF). No los escudos. |
| `1001`–`1008` | Solo ese [escudo](https://developers.openwaf.dev/es/waf/shields/). |
| cualquier otro | Solo esa regla. |

## Valores de path_pattern

| `path_pattern` | Coincide con |
|---|---|
| vacío o `*` | cualquier ruta |
| acabado en `*`, p. ej. `/api/upload/*` | cualquier ruta que empiece por `/api/upload/` |
| cualquier otro, p. ej. `/contact` | exactamente esa ruta |

La ruta se compara sin la query y después de limpiar los segmentos `//` y `.`.

## Añadir una excepción

**Panel**

Dominio → **Seguridad → Firewall → Reglas → Excepciones del WAF** → **Añadir excepción del WAF**. Indica la **Regla del WAF** (`0`, el identificador de un escudo o el de la regla), la **Ruta** y, si quieres, los nombres en **Se aplica a** y una **Nota**.
**CLI**

```sh
openwaf-cloud ctl rules add example.com kind=waf_exception rule_id=942100 path_pattern='/search' \
  note="El buscador acepta texto parecido a SQL" --reason "Falso positivo en /search"
```
**API**

```sh
curl -sS -X POST "https://dash.openwaf.dev/v1/orgs/$ORG/zones/example.com/rules" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "X-Change-Reason: Falso positivo en /search" \
  -H "Content-Type: application/json" \
  -d '{"kind": "waf_exception", "rule_id": 942100, "path_pattern": "/search", "note": "El buscador acepta texto parecido a SQL"}'
```
**MCP**

`add_rule` con `{"zone": "example.com", "kind": "waf_exception", "rule_id": 942100, "path_pattern": "/search", "reason": "…"}`; simula y después confirma.


Añade `hosts` (`hosts:='["shop.example.com"]'` en la CLI) para limitar la excepción a algunos nombres. Las reglas no se editan: borra la regla y vuelve a añadirla.

> **Atención**
>
> Haz las excepciones lo más estrechas posible. Una excepción con `rule_id` 0 en `*` desactiva el WAF de todo el sitio; mejor la regla exacta en la ruta exacta.
