---
name: azion-crie-uma-excecao-do-waf
description: >-
  Isente uma regra interna de pontuar uma parte da requisição, no path que produz um falso positivo, pelo Azion Console, pela CLI ou pela API.
---

# Crie uma exceção do WAF

Você pode criar uma exceção do [Web Application Firewall (WAF)](/pt-br/documentacao/plataforma/firewall/#waf) pelo Azion Console, pela Azion CLI ou pela API. Uma exceção tira uma parte da requisição do score de uma regra interna, no path que você nomear. Para transformar várias requisições correspondidas em exceções de uma vez, consulte [Ajuste um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/tune-waf/).

O Azion Console chama uma exceção de allowed rule, e a aba que as guarda se chama **Allowed Rules**. A API e a Azion CLI chamam o mesmo objeto de exceção.

O exemplo desta página resolve um falso positivo. Uma API em `/api/v1/data` lê um parâmetro de query string `filter` cujos valores carregam um apóstrofo:

```text
GET /api/v1/data?filter=name%20LIKE%20%27test%27
```

A regra interna `1013` corresponde a esse apóstrofo e a requisição é recusada. A exceção abaixo tira o parâmetro `filter` da regra `1013` apenas nesse path, e deixa a regra pontuando todas as outras requisições.

---

Selecione a interface que você vai usar. Os pré-requisitos e todos os procedimentos abaixo seguem essa escolha.

## Pré-requisitos

- Um firewall com o módulo WAF habilitado. Consulte [Defina as configurações principais de um firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/firewall-definir-main-settings/).
- Um rule set aplicado às requisições que você quer isentar. Consulte [Crie e aplique um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/criar-waf-rule-set/).
- O identificador da regra interna que produziu o falso positivo. Para os identificadores e o que cada regra detecta, consulte [WAF Rule Sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets/).

**Console**

- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).

**CLI**

- A [Azion CLI](/pt-br/documentacao/devtools/cli/) instalada e autorizada.
- O id do rule set que guarda a exceção.

**API**

- Um personal token e `curl`. Para criar um token, consulte [Personal Tokens](/pt-br/documentacao/fundamentos/personal-tokens/).
- O id do rule set que guarda a exceção.

---

## Crie a exceção

Uma exceção nomeia a regra interna que ela isenta, o path ao qual está restrita e ao menos uma condition que nomeia a parte da requisição que ela cobre. Uma condition construída sobre uma match zone `specific_*` carrega o nome ou o valor de um campo; uma match zone genérica cobre essa parte de todas as requisições. Para todos os campos que uma exceção aceita e as quinze match zones, consulte [WAF Exceptions](/pt-br/documentacao/plataforma/firewall/waf/custom-allowed-rules/).

A comparação é definida uma vez, para a exceção inteira. `contains` lê o path e o nome ou o valor da condition como substrings. `regex` lê os dois como expressões regulares, e não há como fazer um ser um padrão e o outro um literal.

**Console**

Para criar a exceção no Azion Console:

1. **Abra a página WAF Rules**

   Acesse o [Azion Console](https://console.azion.com/) > **Edge Libraries** > **WAF Rules**.

2. **Selecione o rule set que pontua a requisição**

3. **Selecione a aba Allowed Rules**

4. **Selecione + Allowed Rule**

5. **Selecione a regra a isentar**

   Em **Rule ID**, selecione a regra que produziu o falso positivo. Neste exemplo, a regra `1013`.

6. **Registre por que a requisição é permitida**

   Em **Description**, escreva para que serve a exceção. Por exemplo: `Allow apostrophes in the data API filter`.

7. **Restrinja a exceção a um path**

   Em **Path**, digite `/api/v1/data`.

8. **Nomeie a parte da requisição**

   Em **Condition**, selecione *Specific Query String Name* e digite `filter` no campo **Name** que aparece.

9. **Escolha a comparação**

   Em **Operator**, selecione `contains` para ler as strings como substrings, ou `regex` para lê-las como expressões regulares.

10. **Salve a exceção**

A exceção aparece na aba **Allowed Rules**, em uma linha que carrega **Rule ID**, **Description**, **Path**, **Conditions**, **Status**, **Last Editor** e **Last Modified**. A mesma aba carrega um botão **Create from Tuning**, que escreve exceções a partir de registros que o rule set já correspondeu.

**CLI**

A Azion CLI lê a exceção de um arquivo. A flag `--conditions` não funciona com nenhum valor: a CLI envia um array vazio e a API responde `400` com `10049 Ensure this field has at least 1 elements.`

Para criar a exceção com a Azion CLI:

1. **Escreva a exceção em um arquivo**

   Salve o seguinte como `exception.json`:

   ```json
   {
     "rule_id": 1013,
     "name": "Allow apostrophes in the data API filter",
     "path": "/api/v1/data",
     "operator": "contains",
     "active": true,
     "conditions": [
       { "match": "specific_query_string_name", "name": "filter" }
     ]
   }
   ```

2. **Crie a exceção**

   Substitua `<waf-id>` pelo id do seu rule set:

   ```bash
   azion create waf-exceptions --waf-id <waf-id> --file exception.json
   ```

3. **Leia a saída**

   O comando imprime o id da nova exceção:

   ```text
   Created WAF Exception with ID 123457
   ```

Guarde esse id. A próxima seção o devolve à CLI.

**API**

A exceção é um `POST` para a collection `exceptions` de um rule set.

1. **Envie a requisição de criação**

   Substitua `<waf-id>` pelo id do seu rule set e `[TOKEN VALUE]` pelo seu personal token:

   ```bash
   curl --request POST \
     --url https://api.azion.com/v4/workspace/wafs/<waf-id>/exceptions \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]' \
     --header 'Content-Type: application/json' \
     --data '{
     "rule_id": 1013,
     "name": "Allow apostrophes in the data API filter",
     "path": "/api/v1/data",
     "operator": "contains",
     "active": true,
     "conditions": [
       { "match": "specific_query_string_name", "name": "filter" }
     ]
   }'
   ```

2. **Leia a resposta**

   Uma criação responde `202`, não `201`, e `"state": "pending"` significa que a mudança ainda está propagando:

   ```json
   {
     "state": "pending",
     "data": {
       "id": 123456,
       "rule_id": 1013,
       "name": "Allow apostrophes in the data API filter",
       "path": "/api/v1/data",
       "conditions": [
         { "match": "specific_query_string_name", "name": "filter" }
       ],
       "operator": "contains",
       "active": true,
       "last_editor": "user@example.com",
       "last_modified": "2026-01-01T12:00:00.000000Z"
     }
   }
   ```

Guarde o `id`. A próxima seção lê a exceção de volta com ele. Dos seis campos do corpo, apenas `name` e `conditions` são obrigatórios: `rule_id` tem `0` como padrão, o que isenta todas as regras, `operator` tem `contains` como padrão, e `active` tem `true` como padrão.

Uma exceção é aceita antes de estar em vigor. Ela alcança a infraestrutura distribuída da Azion ao longo dos próximos minutos, então uma requisição que continua recusada logo depois da criação não quebrou nada. Espere e envie de novo.

---

## Confirme o que a exceção cobre

> **Atenção**
>
> Uma chave que a forma da condition não carrega é descartada, não rejeitada. Uma condition enviada como `{"match": "any_http_header_value", "name": "cookie"}` é aceita com `202` e é lida de volta como `{"match": "any_http_header_value"}`. A exceção então cobre todos os headers da requisição em vez de um, e nada na resposta diz isso.

Ler a exceção de volta é a única forma de perceber isso. Compare as `conditions` que você recebe com as que você enviou, campo por campo.

**Console**

Para ler a exceção de volta no Azion Console:

1. **Abra a aba Allowed Rules do rule set**
2. **Leia a coluna Conditions da linha que você criou**

A coluna carrega a match zone e, para uma match zone `specific_*`, o nome ou o valor ao qual ela se aplica. Uma linha cuja match zone mostra `Any` onde você selecionou `Specific` cobre essa parte inteira de todas as requisições.

**CLI**

`azion describe waf-exceptions` imprime a exceção armazenada. Leia essa saída em vez de `azion list waf-exceptions`, cuja coluna `RULE ID` não imprime a regra.

Para ler a exceção de volta com a Azion CLI:

1. **Descreva a exceção**

   Substitua `<waf-id>` e `<exception-id>` pelos seus ids:

   ```bash
   azion describe waf-exceptions --waf-id <waf-id> --exception-id <exception-id> --format json
   ```

2. **Compare as conditions com o que você enviou**

   ```json
   {"active": true, "conditions": [{"match": "specific_query_string_name", "name": "filter"}],
    "id": 123457, "last_editor": "user@example.com",
    "last_modified": "2026-01-01T12:00:00.000000Z", "name": "Allow apostrophes in the data API filter",
    "operator": "contains", "path": "/api/v1/data", "rule_id": 1013}
   ```

A condition armazenada carrega a chave `name`. Uma exceção cuja condition armazenada traz apenas `match` cobre todos os parâmetros de query string.

**API**

Para ler a exceção de volta pela API:

1. **Envie a requisição de leitura**

   Substitua `<waf-id>` e `<exception-id>` pelos seus ids:

   ```bash
   curl --request GET \
     --url https://api.azion.com/v4/workspace/wafs/<waf-id>/exceptions/<exception-id> \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]'
   ```

2. **Compare as conditions com o que você enviou**

   Uma leitura responde `200` e carrega a exceção armazenada:

   ```json
   {
     "data": {
       "id": 123456,
       "rule_id": 1013,
       "name": "Allow apostrophes in the data API filter",
       "path": "/api/v1/data",
       "conditions": [
         { "match": "specific_query_string_name", "name": "filter" }
       ],
       "operator": "contains",
       "active": true,
       "last_editor": "user@example.com",
       "last_modified": "2026-01-01T12:00:00.000000Z"
     }
   }
   ```

A condition armazenada carrega a chave `name`. Uma exceção cuja condition armazenada traz apenas `match` cobre todos os parâmetros de query string.

---

## Próximos passos

- [WAF Exceptions](/pt-br/documentacao/plataforma/firewall/waf/custom-allowed-rules.md): Todos os campos que uma exceção carrega, as quinze match zones e a tela de Tuning.
- [Ajuste um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/tune-waf.md): Leia o que um rule set correspondeu e escreva exceções a partir desses registros em massa.
- [Score e modos](/pt-br/documentacao/plataforma/firewall/waf/score-e-modos.md#excecoes): O que uma exceção subtrai do score, e quanto custa uma exceção ampla.
- [Boas práticas de Firewall](/pt-br/documentacao/plataforma/firewall/boas-praticas.md#waf): Como manter uma exceção estreita e como decidir quando removê-la.
