Amazon AWS WAF
e CapMonster Cloud

Resolução de captcha, instalação no site e testes.

Preços da solução Amazon AWS WAF

CAPTCHA
Preço (USD)
$ 1.40
1000 tokens
Herdou um site com captcha ou outra proteção mas sem acesso ao código-fonte? É natural perguntar qual solução está instalada, se está configurada corretamente e como testá-la.

Neste artigo procurámos responder a todas as questões importantes. Para começar a resolver o problema, o primeiro passo é identificar que sistema de proteção está a ser utilizado. Para isso, pode consultar a lista de captchas e sistemas de proteção antibot mais populares, onde encontrará exemplos visuais e sinais principais que ajudam a perceber rapidamente com o que está a lidar.

Se verificar que o seu site utiliza Amazon AWS WAF, o passo seguinte é analisar mais detalhadamente as suas características e o seu funcionamento. Neste mesmo artigo também pode consultar o guia de integração de Amazon AWS WAF, para compreender totalmente como o sistema funciona no seu site. Isto permitirá não só entender a proteção atual, como também planear corretamente a sua manutenção.

O que é o AWS WAF da Amazon
O que é o AWS WAF da Amazon

AWS WAF (Amazon Web Services Web Application Firewall) é um firewall de aplicação web na nuvem da Amazon que protege sites, APIs e aplicações web contra ataques e tráfego malicioso. Em termos simples, é um filtro que fica à frente do seu site ou API e decide qual tráfego de visitantes deixar passar e qual bloquear.

Se o Challenge/CAPTCHA estiver ativado no site, o visitante pode ver uma página de verificação separada. Será solicitado que ele realize uma tarefa, por exemplo, selecionar todas as imagens de uma categoria, para confirmar que não é um robô.

Como resolver o AWS WAF através do CapMonster Cloud

Ao testar recursos protegidos pelo AWS WAF, é importante garantir que a proteção funcione corretamente e esteja integrada adequadamente.

Você pode verificar manualmente o funcionamento da proteção:

  • Abra a página com o formulário ou recurso e certifique-se de que o AWS WAF responda corretamente às solicitações.
  • Tente realizar ações que possam ser limitadas pelo WAF (por exemplo, solicitações em massa, cabeçalhos suspeitos) — o servidor deve bloquear tais solicitações ou retornar um erro.

Após passar na verificação com sucesso, o AWS WAF define cookies que confirmam que o usuário ou cliente passou na verificação e que o tráfego confiável é permitido.

Para o reconhecimento automático de captcha, você pode usar serviços especializados, por exemplo, o CapMonster Cloud — uma ferramenta que aceita os parâmetros do captcha, processa-os em seus servidores e retorna cookies ou um token prontos. Eles podem ser inseridos no navegador para passar na verificação sem a participação do usuário.

Trabalhar com o CapMonster Cloud através da API normalmente envolve os passos seguintes:

Criação da tarefaCriação da tarefa
arrow
Envio do pedido APIEnvio do pedido API
arrow
Receção do resultadoReceção do resultado
arrow
Substituição de cookies aws-waf-token na páginaSubstituição de cookies aws-waf-token na página
arrow
Reconhecimento do Amazon AWS WAF usando bibliotecas prontas
O serviço CapMonster Cloud fornece bibliotecas prontas para um trabalho conveniente nas linguagens Python, JavaScript (Node.js) e C#.

Importante: estes exemplos de código usam cookieSolution=False. Se como resultado você precisar obter cookies, defina cookieSolution=True.

Python
JavaScript
C#
Solução, obtenção de parâmetros e definição de cookies
Exemplo em Node.js para o ciclo completo de reconhecimento de captcha na sua página web. Abordagens possíveis: usar solicitações HTTP para obter o HTML e os parâmetros do sistema de proteção, enviar a resposta e processar o resultado. Ou com a ajuda de ferramentas de automação (por exemplo, Playwright) — abrir a página, aguardar a verificação, enviar os parâmetros através do cliente CapMonster Cloud, obter o resultado, inserir os cookies no navegador (para testes você pode usar tanto dados corretos quanto incorretos) e ver o resultado.
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, AmazonRequest } from "@zennolab_com/capmonstercloud-client";

const API_KEY = "YOUR_API_KEY";
const CAPTCHA_URL = "https://example.com";

// Configurações de proxy
const PROXY = {
    proxyType: "http",
    proxyAddress: "PROXY_HOST",
    proxyPort: 1234,
    proxyLogin: "PROXY_USER",
    proxyPassword: "PROXY_PASS"
};

(async () => {
    // 1) Abrimos a página via proxy e coletamos os parâmetros do AWS WAF
    const browser = await chromium.launch({
        headless: false,
        proxy: {
            server: `http://${PROXY.proxyAddress}:${PROXY.proxyPort}`,
            username: PROXY.proxyLogin,
            password: PROXY.proxyPassword
        }
    });

    const page = await browser.newPage();
    await page.goto(CAPTCHA_URL, { waitUntil: "networkidle" });

    // aguardamos o carregamento dos scripts de challenge e captcha
    await page.waitForFunction(() => {
        const scripts = Array.from(document.querySelectorAll("script")).map(s => s.src || "");
        return scripts.some(src => src.includes("challenge")) && scripts.some(src => src.includes("captcha"));
    });

    // extraímos os parâmetros do AWS WAF (chave, context, iv, links para scripts)
    const params = await page.evaluate(() => {
        const gokuProps = window.gokuProps || {};
        const scripts = Array.from(document.querySelectorAll("script")).map(s => s.src || "");
        return {
            websiteKey: gokuProps.key || null,
            context: gokuProps.context || null,
            iv: gokuProps.iv || null,
            challengeScript: scripts.find(src => src.includes("challenge")),
            captchaScript: scripts.find(src => src.includes("captcha"))
        };
    });

    await browser.close();

    // 2) Resolvemos o AWS WAF através do CapMonster Cloud
    const client = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));

    const req = new AmazonRequest({
        websiteURL: CAPTCHA_URL,
        websiteKey: params.websiteKey,
        challengeScript: params.challengeScript,
        captchaScript: params.captchaScript,
        context: params.context,
        iv: params.iv,
        cookieSolution: true,
        proxy: PROXY
    });

    const solved = await client.Solve(req);
    const wafToken = solved.solution.cookies["aws-waf-token"];

    // 3) Inserimos o aws-waf-token e limpamos os antigos
    const browser2 = await chromium.launch({
        headless: false,
        proxy: {
            server: `http://${PROXY.proxyAddress}:${PROXY.proxyPort}`,
            username: PROXY.proxyLogin,
            password: PROXY.proxyPassword
        }
    });

    const context2 = await browser2.newContext();

    // limpeza de aws-waf-token antigos para o seu domínio
    const existingCookies = await context2.cookies();
    const filteredCookies = existingCookies.filter(c => !(c.name === "aws-waf-token" && c.domain.endsWith(".your-domain")));
    await context2.clearCookies();
    await context2.addCookies(filteredCookies);

    // definição do novo aws-waf-token
    await context2.addCookies([{
        name: "aws-waf-token",
        value: wafToken,
        domain: ".your-domain",
        path: "/",
        httpOnly: false,
        secure: true
    }]);

    const page2 = await context2.newPage();
    const response = await page2.goto(CAPTCHA_URL, { waitUntil: "networkidle" });

    console.log("Final page status:", response.status());
    console.log("Final page URL:", page2.url());

    await browser2.close();
})();
Como conectar o AWS WAF ao seu site
Para se orientar com confiança no funcionamento do captcha no seu site, entender a lógica da sua verificação, reconectá-lo ou reconfigurá-lo, recomendamos estudar esta seção. Nela é descrito o processo de conexão da proteção — isso ajudará você a entender rapidamente todas as nuances.

O AWS WAF não pode ser instalado diretamente em um site. Ele funciona apenas através de recursos da AWS:

  • Amazon CloudFront (a opção principal e melhor) — CDN através da qual qualquer site pode ser protegido. Funciona rápido, globalmente e é adequada para quase todos os casos.
  • Application Load Balancer (ALB) — usado para sites do lado do servidor, APIs e contêineres dentro da AWS. Se o seu backend funciona no EC2, ECS, EKS — coloque o WAF no ALB.
  • API Gateway — proteção de APIs REST e WebSocket. Adequado para SPA, aplicativos móveis e microsserviços.
  • AWS AppSync (API GraphQL)
  • Amazon Cognito (login/registro)
  • AWS App Runner (aplicativos em contêineres)
  • AWS Amplify Hosting (hospedagem frontend)
  • AWS Verified Access (acesso a aplicativos internos)

Passo 1. Crie uma conta AWS (se não tiver uma)

Vá para: https://portal.aws.amazon.com/billing/signup. Crie a conta > confirme e-mail e telefone.

Passo 2. Você pode usar a interface padrão ou a nova interface do AWS WAF:

  1. Vá para o console da AWS
  2. Abra o AWS WAF. No menu à esquerda, clique em Try the new experience (se oferecido).

Passo 3. Crie um pacote de proteção (Web ACL)

Este é o conjunto de regras de proteção para o seu recurso.

  1. No menu à esquerda selecione: Resources & protection packs (Web ACLs)
  2. Clique em Add protection pack (web ACL).

Passo 4. Configure a categoria da aplicação:

No bloco Tell us about your app:

  • App category — selecione Web / API / Both
  • Traffic source — de onde vem o tráfego (web, API ou ambos)

Esses parâmetros são necessários para que a AWS ofereça regras ideais.

Passo 5. Selecione os recursos que serão protegidos

  1. Clique em Add resources
  2. Escolha o que você está conectando:

Se o seu site está no CloudFront > selecione CloudFront distributions
Se o seu backend está no ALB > selecione Regional resources
Se API > selecione API Gateway REST API
Marque a caixa no recurso necessário > clique em Add.

Passo 6. Selecione um conjunto de regras inicial.

A AWS oferecerá:

Recommended for you — a melhor opção para iniciantes

Ele inclui:

  • proteção básica
  • regras contra SQLi e XSS
  • IP reputation lists (listas de reputação de IP)
  • Bot Control (opcional)
  • regras para web/API

Clique em Next.

Passo 7. Configuração (opcional)

Na tela Customize protection pack (web ACL):

Parâmetros principais:

  • Default action:
    • Allow all except blocked — geralmente escolhe-se isso
    • Block all except allowed — se o site for fechado
  • Default rate limits: Limite de quantidade de solicitações (mitigação DDoS L7)
  • IP addresses: Listas brancas/negras
  • Country specific origins: Restrição de tráfego por países

Registro (Logging)

Escolha onde gravar os logs:

  • CloudWatch
  • S3
  • Firehose

(recomenda-se S3 + Athena).

Passo 8. Criar Web ACL

Clique em: Add protection pack (web ACL)

A AWS criará as regras e as vinculará ao seu recurso.

Verificação

Para garantir que a proteção está funcionando:

  1. Abra o WAF > selecione sua Web ACL
  2. Vá para Monitoring
  3. Observe:
    • gráficos de tráfego
    • solicitações bloqueadas
    • solicitações de amostra (sample requests)

Adicional (opcional)

  • Ativar CAPTCHA ou Challenge

    Em qualquer regra > Action > CAPTCHA / Challenge

    Isso reduz o tráfego de bots e protege páginas de login e formulários.

  • Adicionar Managed Rule Groups

    Na seção Rule groups você pode adicionar:

    • AWS Managed
    • Bot Control
    • Account takeover prevention
    • Marketplace rules (F5, Imperva, Fortinet)
  • Vincular com Shield Advanced. Para proteção contra DDoS (L3–L7).

Background
Possíveis erros e depuração
Bug Icon
Domínio ou regra inválida — O Challenge não é exibido
Verifique se o AWS WAF WebACL está vinculado ao domínio correto (CloudFront Distribution / ALB / API Gateway), caminho correto e se não há conflitos entre regras.
Bug Icon
Tempo limite ao carregar a página ou verificar
Às vezes, o navegador ou script não aguarda a resposta do AWS WAF. Aumente os tempos limite (timeouts) nos testes e certifique-se de que o backend processa as solicitações sem atrasos.
Bug Icon
Cookies do AWS WAF expirados
Os _aws_waf_token_… obsoletos ou tags de cookies relacionadas levam a um Challenge repetido ou bloqueio temporário.
Bug Icon
Regras excessivamente sensíveis
Assinaturas de Bot Control muito rigorosas, regras de CAPTCHA ou regras baseadas em taxa (Rate-based) podem bloquear usuários reais.
Bug Icon
Configuração incorreta da WebACL
Erros na ordem das regras, prioridades ou condições podem levar a falsos positivos e bloqueios.
Verificações de robustez
Depois da integração, certifique-se de que o sistema protege efetivamente o site contra ações automatizadas.
Recomendações de segurança e otimização
Configure a WebACL de acordo com o nível de risco. Use Managed Rules (AWS, AWS Marketplace), AWS Bot Control e regras personalizadas baseadas em reputação de IP, cabeçalhos, limite de taxa e outras condições.
Registre os eventos do WAF. Ative o <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> para análise de falsos positivos e otimização de regras.
Adicione links para a <span class="font-bold">Política de Privacidade</span> e <span class="font-bold">Termos de Uso</span>. Isso é importante para a transparência e conformidade com os requisitos de segurança e expectativas dos usuários.
Conclusão

Se herdou um site que já tem um captcha ou outro sistema de proteção instalado e não tem acesso ao código, não há problema! É bastante fácil identificar qual a tecnologia que está a ser utilizada. Para verificar se tudo está a funcionar corretamente, pode usar o serviço de reconhecimento CapMonster Cloud num ambiente de teste isolado, para garantir que o mecanismo de processamento de tokens e a lógica de verificação estão a funcionar corretamente.

No caso de Amazon AWS WAF, basta identificar o sistema, analisar o seu comportamento e confirmar que a proteção está a funcionar corretamente. No artigo, mostramos como identificar Amazon AWS WAF e onde encontrar instruções para a sua integração ou reconfiguração, para que possa manter a proteção com confiança e controlar o seu funcionamento.

Conclusion
Links úteis
DocIconDocumentação do AWS WAFDocIconDocumentação do CapMonster Cloud (trabalho com AWS WAF)DocIconVisão geral da proteção de recursos web com AWS WAF

Perguntas frequentes sobre Amazon AWS WAF

Os valores websiteKey, context e iv vêm da página de challenge AWS WAF e podem ser extraídos do HTML dessa página ou via JavaScript a partir de window.gokuProps.key, window.gokuProps.context e window.gokuProps.iv. Pode extraí-los automaticamente usando os nossos scripts prontos a usar.

São parâmetros relacionados com a sessão da página de challenge atual, não valores estáticos genéricos para reutilizar entre tentativas.

O campo booleano cookieSolution controla o formato da solução AWS WAF devolvida pelo CapMonster Cloud:

  • false — a resposta contém captcha_voucher e existing_token
  • true — a solução inclui cookies com o aws-waf-token pronto a usar

Para fluxos de automação de browser como Playwright, Puppeteer e Selenium, cookieSolution: true é geralmente a opção mais conveniente, pois devolve cookies prontos a usar que podem ser adicionados diretamente à sessão do browser.

Por predefinição, não precisa de fornecer proxies próprios para tarefas AWS WAF, pois o CapMonster Cloud utiliza proxies integrados e o seu custo já está incluído no serviço.

No entanto, precisa de especificar proxies próprios quando o site de destino não aceita o token ou quando o acesso aos serviços integrados está restrito. Se utilizar um proxy com autorização por IP, certifique-se de incluir na whitelist o endereço 65.21.190.34.

Um token AWS WAF válido não contorna automaticamente o resto da lógica Web ACL. A AWS indica que quando um pedido tem um token válido para uma regra CAPTCHA ou Challenge, essa regra é tratada de forma semelhante à ação Count e a AWS WAF continua a avaliar o pedido contra as regras restantes na Web ACL. Isso significa que Bot Control, rate-based rules e outras regras ainda podem afetar o tráfego automatizado, e a AWS documenta separadamente cenários de falsos positivos para Bot Control.

Na prática, a resolução de problemas deve focar-se na ordem das regras, prioridade, definições de token e possíveis falsos positivos, em vez de assumir que uma CAPTCHA resolvida garante por si só a passagem.

Challenges AWS WAF repetidos geralmente ocorrem quando o token expirou, o cookie aws-waf-token está em falta ou desatualizado, o tempo de imunidade da sessão terminou ou a partilha de token não está configurada para fluxos multi-domínio.

Para programadores de sites: Defina o tempo de imunidade CAPTCHA ou Challenge de acordo com o comportamento real dos utilizadores, configure uma lista de domínios de token para domínios relacionados, verifique se a integração JavaScript AWS WAF armazena o token corretamente e garanta que regras Web ACL mais rigorosas não continuam a bloquear tráfego legítimo após a CAPTCHA ser resolvida.

Para utilizadores do CapMonster Cloud: Use dados de tarefa frescos da página de destino, passe o resultado no formato necessário através do cookie aws-waf-token ou do cabeçalho x-aws-waf-token, e crie uma nova tarefa com parâmetros atualizados em vez de reutilizar uma solução antiga se os challenges continuarem.