---
name: azion-encontre-o-score-de-uma-requisicao-bloqueada
description: >-
  Leia quais regras internas corresponderam a uma requisição recusada, e quanto cada família de ameaças pontuou, no Real-Time Events ou na API GraphQL.
---

# Encontre o score de uma requisição bloqueada

Você pode ler quais regras internas corresponderam a uma requisição que o [Web Application Firewall (WAF)](/pt-br/documentacao/plataforma/firewall/#waf) recusou, e quanto cada família de ameaças pontuou.

A decisão não deixa nada na resposta, então ela é consultada depois. O header `x-azion-request-id` na recusa é o que a liga ao seu evento. Para o modelo por trás do score, consulte [Score e modos](/pt-br/documentacao/plataforma/firewall/waf/score-e-modos/#score-e-sensibilidade).

---

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

## Pré-requisitos

- Um workload vinculado a um firewall que aplica um WAF rule set em modo `Blocking`. Consulte [Primeiros passos com WAF](/pt-br/documentacao/plataforma/firewall/waf/primeiros-passos/).
- O domínio desse workload, que tem o formato `<id>.map.azionedge.net`.

**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/).

**API**

- Um personal token e o `curl`. Para criar um token, consulte [Personal Tokens](/pt-br/documentacao/fundamentos/personal-tokens/).

---

## Capture o request ID

Uma requisição recusada recebe `400`, e ela nunca alcança uma origem. Nada nessa resposta nomeia o WAF, a regra que correspondeu ou o score, então o request ID é o único valor que encontra o evento.

Para provocar uma recusa no seu próprio workload, envie uma requisição com a forma de uma injection:

```bash
curl -i "https://<your-workload-domain>/?q=1%27%20OR%20%271%27%3D%271"
```

O WAF a recusa:

```text
HTTP/2 400
content-type: text/html
x-azion-request-id: 0123456789abcdef0123456789abcdef
```

Anote o `x-azion-request-id`. Nenhum header `x-azion-waf-*` existe, nesta resposta ou em qualquer outra, então uma recusa não se distingue de outro `400` apenas pelos headers.

O corpo é a página de erro padrão da Azion, encabeçada por **Bad Request**. Um visitante que reporta uma recusa pode ler o mesmo valor na linha **Request ID** do bloco **Error Details** dessa página.

---

## Encontre o evento no Real-Time Events

O [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/) guarda uma linha por requisição, e essa linha carrega a decisão do WAF.

**Console**

Para abrir o evento no Azion Console:

1. **Abra o Real-Time Events**

   Acesse o [Azion Console](https://console.azion.com/) > **Real-Time Events**.

2. **Selecione a aba HTTP Requests**

3. **Defina o intervalo de tempo**

   No dropdown de intervalo de tempo, selecione um intervalo que contenha a requisição.

4. **Busque as requisições recusadas**

   No campo **Search**, escreva a query abaixo, com o domínio do seu workload em `host`:

   ```text
   host='<your-workload-domain>' AND waf_attack_action='$BLOCK'
   ```

5. **Selecione a requisição na lista de resultados**

O evento abre com seus campos de WAF, entre eles **WAF Block** e **WAF Learning**.

Uma segunda query alcança as mesmas linhas pelo outro lado, já que uma recusa é um `400` cujo upstream status é `0`:

```text
host='<your-workload-domain>' AND status='400' AND upstream_status='0'
```

As duas queries retornam resultados semelhantes, com pequenas variações entre eles.

**API**

Para retornar o evento pela API GraphQL:

1. **Escreva a query**

   Salve o conteúdo a seguir como `waf-event.json`, com o seu request ID em `requestIdEq` e uma janela de tempo ao redor da requisição em `tsGte` e `tsLt`:

   ```json
   {
     "query": "query { workloadEvents(limit: 3, filter: { tsGte: \"2026-01-01T11:55:00\", tsLt: \"2026-01-01T12:05:00\", requestIdEq: \"0123456789abcdef0123456789abcdef\" }) { ts requestId host requestUri status upstreamStatus wafBlock wafMatch wafLearning wafScore wafAttackFamily wafAttackAction wafEvheaders wafTotalBlocked wafTotalProcessed } }"
   }
   ```

2. **Envie a query**

   Substitua `[TOKEN VALUE]` pelo seu personal token:

   ```bash
   curl --request POST \
     --url https://api.azion.com/v4/events/graphql \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]' \
     --header 'Content-Type: application/json' \
     --data @waf-event.json
   ```

3. **Leia o evento**

   A chamada responde `200`, e a linha carrega a decisão inteira:

   ```json
   {
     "ts": "2026-01-01T12:00:00Z",
     "requestId": "0123456789abcdef0123456789abcdef",
     "host": "<your-workload-domain>",
     "requestUri": "/?q=1%27%20OR%20%271%27%3D%271",
     "status": 400,
     "upstreamStatus": 0,
     "wafBlock": "1",
     "wafMatch": "0:1009:ARGS:q,1:1013:ARGS:q",
     "wafLearning": "0",
     "wafScore": "0:$SQL:18,1:$XSS:32",
     "wafAttackFamily": "$SQL,$XSS",
     "wafAttackAction": "$BLOCK",
     "wafTotalBlocked": 0,
     "wafTotalProcessed": 0,
     "wafEvheaders": "<base64>"
   }
   ```

`wafEvheaders` é base64. Decodificado, ele carrega os headers da requisição que foi recusada.

> **nota**
>
> O endpoint é `/v4/events/graphql`, e o dataset é `workloadEvents`. O path mais antigo `/events/graphql` responde `204` com o corpo vazio, e não existe dataset `httpEvents` nem `wafEvents`. Os campos de WAF em `workloadEvents` são camelCase: `wafBlock`, e não `waf_block`.

---

## Leia a correspondência e o score

`wafMatch` e `wafScore` carregam a decisão. Os dois são strings que guardam uma entrada por correspondência, separadas por vírgulas, e os dois leem `-` em uma requisição sobre a qual o WAF não agiu.

`wafMatch` tem o formato `<index>:<ruleId>:<zone>:<varName>`. Em `0:1009:ARGS:q,1:1013:ARGS:q`, as regras internas `1009` e `1013` corresponderam cada uma ao argumento `q` na zona `ARGS`. São essas duas, e não uma única regra de injection, que `1' OR '1'='1` dispara. Para o que cada id detecta, consulte [WAF Rule Sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets/#regras-internas).

`wafScore` tem o formato `<index>:$<family>:<score>`, e é **um score por família de ameaças**, nunca um número para a requisição. Em `0:$SQL:18,1:$XSS:32`, a família SQL injection tem score `18` e a família cross-site scripting tem score `32`. Uma família bloqueia quando o seu score alcança o limiar do nível de sensibilidade definido para ela: as duas famílias acima estão definidas como `medium`, cujo limiar é `16`. Os limiares estão listados em [WAF Rule Sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets/#niveis-de-sensibilidade).

Nenhuma fonte informa um limite superior para um score, então um score não carrega leitura percentual. Uma regra interna que não pertence a nenhuma família pontuada reporta `wafScore` como um nome de família isolado, como `$OTHERS`.

Os campos restantes estreitam a leitura. `wafBlock` lê `1` quando a requisição foi recusada. `wafLearning` lê `1` quando a regra rodou em modo `Logging`, que registra a correspondência e serve a requisição. `wafAttackFamily` e `wafAttackAction` resumem o mesmo evento como `$SQL,$XSS` e `$BLOCK`. O Azion Console renderiza esses valores sob labels, entre eles **WAF Block** e **WAF Learning**.

`wafTotalProcessed` e `wafTotalBlocked` leem `0` em toda linha por requisição, inclusive na linha de uma requisição que foi recusada. Eles são contadores agregados, então não respondem nada sobre uma requisição individual.

---

## Próximos passos

- [Score e modos](/pt-br/documentacao/plataforma/firewall/waf/score-e-modos.md): O caminho que uma requisição percorre, o modelo de score e o que cada modo faz.
- [WAF Rule Sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets.md): As oito famílias de ameaças, os cinco níveis de sensibilidade e as regras internas por trás de cada correspondência.
- [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 transforme um falso positivo em uma exceção.
- [Solucionar problemas de Firewall](/pt-br/documentacao/plataforma/firewall/solucao-de-problemas.md#waf): O que fazer quando uma requisição legítima é recusada, ou quando uma com forma de ataque é servida.
