---
name: azion-leia-o-score-de-uma-requisicao-bloqueada
description: >-
  Consulte no Real-Time Events as regras internas que corresponderam a uma requisição e o score que cada família de ameaças deu a ela.
---

# Leia o score de uma requisição bloqueada

Você pode ler quais regras internas corresponderam a uma requisição bloqueada, e o score que cada família de ameaças deu a ela, pela API GraphQL do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). Uma resposta bloqueada carrega `400` e a página **Bad Request**, sem header que nomeie o WAF; o header `x-azion-request-id` dela encontra o registro.

---

## Pré-requisitos

- Uma regra que aplica um rule set em `blocking` no firewall vinculado ao seu workload. Para criá-la, consulte [Aplique um rule set a toda requisição](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/aplicar-rule-set/).
- Um personal token, para a query GraphQL.

---

## Leia o request id

Envie uma requisição que o WAF bloqueia, e leia o header `x-azion-request-id` na resposta:

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

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

A resposta é `HTTP/2 400` com o header `x-azion-request-id`, e o valor dele é o request id pelo qual a query abaixo filtra.

---

## Consulte o registro da requisição

Envie uma query GraphQL para `https://api.azion.com/v4/events/graphql`, sobre o dataset `workloadEvents`, com um personal token, filtrada pelo request id e por uma janela ao redor dele:

```graphql
query {
  workloadEvents(
    limit: 1
    filter: { tsGte: "<start>", tsLt: "<end>", requestIdEq: "<request-id>" }
  ) {
    ts
    requestUri
    status
    upstreamStatus
    wafBlock
    wafMatch
    wafScore
    wafAttackFamily
    wafAttackAction
  }
}
```

```json
{
  "ts": "2026-01-01T12:00:00Z",
  "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",
  "wafScore": "0:$SQL:18,1:$XSS:32",
  "wafAttackFamily": "$SQL,$XSS",
  "wafAttackAction": "$BLOCK"
}
```

A linha retorna `wafBlock` como `1`, uma entrada por regra interna que correspondeu em `wafMatch` e um score por família de ameaças em `wafScore`.

Uma entrada de `wafMatch` tem o formato `<index>:<ruleId>:<zone>:<varName>`, então `1:1013:ARGS:q` nomeia a regra `1013` no argumento `q`. Uma entrada de `wafScore` tem o formato `<index>:$<family>:<score>`, então uma requisição tem vários scores em vez de um. `upstreamStatus` lê `0` porque a requisição nunca alcançou uma origem.

> **nota**
>
> Uma requisição sobre a qual o WAF não agiu carrega `-` em cada um desses campos, e um `400` sem uma linha dessas não é um bloqueio do WAF. Consulte o path v4: o antigo `https://api.azion.com/events/graphql` responde `204` com um corpo vazio. Os campos aqui são camelCase, em vez das grafias em snake\_case que um payload do [Data Stream](/pt-br/documentacao/plataforma/data-stream/) usa.

---

## Próximos passos

- [Isente um parâmetro de query string](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/isentar-parametro-query.md): Transforme um id de regra lido de wafMatch na exceção que o resolve.
- [WAF Rule Sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets.md): Consulte o que um id de regra interna detecta, para todo id que wafMatch pode nomear.
