O que é WAF (firewall de aplicação)

WAF (Web Application Firewall) é um filtro que fica na frente de um site ou API e inspeciona cada requisição HTTP. Ele bloqueia padrões de ataque conhecidos, como SQL injection e XSS, antes que cheguem à aplicação.

Atualizado em 5 min de leitura

Objetivos de aprendizado

Depois de ler este artigo, você vai conseguir:

  • Entender o que um WAF analisa e onde ele fica na frente da aplicação
  • Diferenciar WAF, firewall de rede e proteção contra DDoS
  • Saber os limites de um WAF e por que ele não substitui código seguro
Nesta página

Todo site ou API exposto à internet recebe requisições que não são de usuários: robôs que testam formulários, scanners que procuram falhas conhecidas, tentativas de injetar código num parâmetro. Um firewall comum não enxerga nada disso, porque o tráfego é HTTP válido, vindo de IPs comuns, para a porta 443.

O WAF existe para cobrir essa lacuna. Ele olha o conteúdo da requisição e decide se ela parece um ataque. Entender o que ele faz (e o que não faz) evita duas confusões comuns: achar que ele resolve tudo ou achar que é só um nome chique para firewall.

Usuário legítimo/busca?name=anaAtacante/busca?name=' OR '1'='1WAFlê URL, cabeçalhos,parâmetros e corpoparece normalSQL injectionAplicaçãorecebe só a legítima403bloqueada antes do código
O WAF lê o conteúdo de cada requisição: a normal segue para a aplicação, a que traz SQL injection para no 403.

O que é um WAF?#

WAF significa Web Application Firewall. É um filtro posicionado entre o cliente e a aplicação web que inspeciona o tráfego HTTP e HTTPS. Se a requisição casa com uma regra de ataque, ele a bloqueia, registra ou desafia (por exemplo, com um CAPTCHA). Se não casa, repassa para a aplicação.

Ele protege contra ataques que exploram a aplicação em si, como SQL injection, XSS (cross-site scripting) e inclusão local de arquivos. Esses exemplos aparecem na descrição do OWASP Core Rule Set (CRS), o conjunto de regras genéricas mais conhecido para WAFs compatíveis com ModSecurity.

Como um WAF funciona por dentro?#

O fluxo básico tem três passos:

  1. A requisição chega ao WAF, que a decodifica (URL, cabeçalhos, cookies, parâmetros, corpo JSON ou formulário).
  2. O WAF compara cada parte com as regras. Uma regra pode ser uma expressão regular, uma lista de padrões ou uma verificação de formato.
  3. Conforme o resultado, ele deixa passar, bloqueia (geralmente com resposta 403) ou só registra.

Muitos WAFs usam pontuação de anomalia. Em vez de bloquear na primeira regra que bate, cada regra soma pontos, e a requisição é bloqueada quando a soma passa de um limite. A documentação do CRS recomenda trabalhar com um limite de 5. Isso reduz bloqueios causados por um único sinal fraco.

Existem dois modelos de regra:

  • Lista de bloqueio (modelo negativo): bloqueia o que parece ruim. É simples de ligar, mas só pega o que as regras conhecem.
  • Lista de permissão (modelo positivo): só aceita o que está descrito como válido (rotas, métodos, tipos de campo). É mais forte, mas dá trabalho para manter.

O que são níveis de paranoia?#

O CRS tem quatro níveis de paranoia. O nível 1 é a base para qualquer servidor HTTP, com poucos falsos alarmes. O nível 2 é indicado para sites que lidam com dados reais de usuários, como uma loja. Os níveis 3 e 4 detectam mais, mas exigem escrever exclusões de regra porque barram tráfego legítimo. Subir o nível sem testar é a forma mais rápida de quebrar um formulário que funcionava.

Um exemplo concreto#

Imagine uma rota de busca que monta a consulta concatenando texto:

js
// ERRADO: vulnerável a SQL injection
const sql = `SELECT * FROM users WHERE name = '${req.query.name}'`;

Um atacante envia ?name=' OR '1'='1. Um WAF reconhece o padrão de injeção e devolve 403 antes de a requisição tocar no código. Mas a correção de verdade está na aplicação:

js
// CERTO: consulta parametrizada (mysql2)
const [rows] = await db.execute("SELECT * FROM users WHERE name = ?", [req.query.name]);

Com a consulta parametrizada, o valor nunca vira parte do SQL. O WAF é uma segunda camada, não a primeira.

Para ter uma ideia de como uma regra é escrita, esta é uma regra mínima de ModSecurity que bloqueia a requisição se algum parâmetro contém <script:

SecRule ARGS "@rx (?i)<script" \
    "id:1001,phase:2,deny,status:403,msg:'Possivel XSS'"

Na prática, você raramente escreve regras assim do zero: usa um conjunto pronto como o CRS e ajusta as exceções.

Qual a diferença entre WAF, firewall de rede e proteção DDoS?#

Firewall de rede WAF Proteção DDoS
Camada 3 e 4 (IP, porta) 7 (HTTP) 3, 4 e 7
Olha origem, destino, protocolo URL, cabeçalhos, corpo volume e comportamento do tráfego
Bloqueia portas e IPs SQL injection, XSS, bots abusivos inundação de tráfego

Eles se complementam. O WAF não é feito para absorver um ataque volumétrico: para isso, veja o que é um ataque DDoS. E é comum o WAF rodar dentro de um proxy reverso ou de uma CDN, porque esse é o ponto por onde o tráfego já passa.

Quais são os limites de um WAF?#

  • Falsos positivos: uma regra mal calibrada bloqueia usuários reais, por exemplo quem cola um trecho de código num campo de texto.
  • Falsos negativos: um atacante pode ofuscar o payload ou usar uma falha que nenhuma regra conhece.
  • Falhas de lógica: um WAF não sabe que o usuário A não deveria ver o pedido do usuário B. Controle de acesso quebrado é problema do código.
  • Custo operacional: alguém precisa ler os logs, ajustar exceções e atualizar regras.

Por isso o WAF entra como parte de uma lista maior. Veja o checklist de segurança para deploy para o que fazer além dele.

Quando faz sentido usar um WAF?#

Faz sentido quando a aplicação é pública e recebe entrada de usuários: formulários, APIs com parâmetros, painéis de login. Também ajuda quando você não pode corrigir uma falha agora, porque uma regra temporária (o chamado virtual patch) bloqueia a exploração enquanto o código não é corrigido.

Faz menos diferença em um bot que só abre conexão de saída com o Gateway do Discord e não recebe requisições HTTP de fora. Sem entrada pública, não há o que filtrar.

Como fazer isso na Square Cloud#

Na Square Cloud, todos os planos incluem um WAF e mitigação de DDoS nas camadas 3, 4 e 7. A infraestrutura usa containers isolados e uma CDN Anycast com HTTP/3 e WebSockets.

Isso não dispensa as boas práticas no código. Mantenha segredos em variáveis de ambiente, use consultas parametrizadas e valide a entrada. Trate o WAF como uma camada extra, não como a defesa principal.

Veja a rede da Square Cloud para os detalhes de CDN, WAF e mitigação de DDoS.

Infraestrutura

Mitigação de DDoS L3/L4/L7 e WAF em todos os planos

Saiba mais

Perguntas frequentes

WAF é a mesma coisa que firewall?

Não. Um firewall de rede decide por IP, porta e protocolo. O WAF atua na camada 7 e lê o conteúdo da requisição HTTP: URL, cabeçalhos, parâmetros e corpo.

Um WAF protege contra DDoS?

Ajuda contra ataques na camada de aplicação, como uma enxurrada de requisições a uma rota cara. Ataques volumétricos, que lotam a banda, precisam de mitigação própria na rede.

Um WAF torna meu código seguro?

Não. Ele reduz o risco, mas pode ser contornado e deixa passar falhas de lógica. Consultas parametrizadas, validação de entrada e autenticação correta continuam obrigatórias.

O que é falso positivo em um WAF?

É quando o WAF bloqueia uma requisição legítima por ela se parecer com um ataque, como um texto com aspas ou um trecho de código num formulário. Regras mais rígidas geram mais falsos positivos.

Próximo artigoChaves SSH: como funcionam e como criarUma chave SSH é um par de chaves (pública e privada) que prova quem você é sem senha. Veja como gerar uma Ed25519, usar o ssh-agent e testar no GitHub.

Mais em Segurança

Ver todos os 10 artigos