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
Você herdou um site com captcha ou outra camada de proteção, mas não tem acesso ao código-fonte? Então é normal querer saber qual solução está instalada, se a configuração está correta e como testar tudo.

Neste artigo, procuramos responder a todas as principais dúvidas. Para começar a resolver o problema, o primeiro passo é identificar qual sistema de proteção está sendo utilizado. Para isso, você pode consultar a lista de captchas e sistemas de proteção antibot mais populares, onde há exemplos visuais e sinais principais que ajudam a identificar rapidamente com o que você está lidando.

Se você notar que o seu site utiliza Amazon AWS WAF, o passo seguinte é estudar com mais detalhes as suas características e o seu funcionamento. Neste mesmo artigo, você também pode conferir o guia de integração do Amazon AWS WAF, para entender por completo como o sistema opera no seu site. Isso permitirá não apenas compreender a proteção atual, mas também planejar adequadamente 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 via API normalmente envolve as etapas abaixo:

Criação da tarefaCriação da tarefa
arrow
Envio da requisição APIEnvio da requisição API
arrow
Recebimento do resultadoRecebimento 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ção da robustez
Depois da integração, confirme que o sistema de fato protege 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 você 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 tem problema! É bem fácil identificar qual tecnologia está sendo usada. Para verificar se tudo está funcionando corretamente, você pode usar o serviço de reconhecimento CapMonster Cloud em um ambiente de testes isolado, para garantir que o mecanismo de processamento de tokens e a lógica de verificação estejam funcionando corretamente.

No caso de Amazon AWS WAF, basta identificar o sistema, analisar o comportamento dele e se certificar de que a proteção está funcionando corretamente. No artigo, mostramos como identificar Amazon AWS WAF e onde encontrar instruções para a integração ou reconfiguração, para que você consiga manter a proteção com segurança e controlar o funcionamento dela.

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. Você pode extraí-los automaticamente usando nossos scripts prontos para uso.

São parâmetros relacionados à 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 retornada 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 para uso

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

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

No entanto, você precisa especificar proxies próprios quando o site de destino não aceita o token ou quando o acesso aos serviços integrados é restrito. Se estiver usando 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 restante da lógica Web ACL. A AWS informa que quando uma solicitação possui um token válido para uma regra CAPTCHA ou Challenge, essa regra é tratada de forma semelhante à ação Count e a AWS WAF continua avaliando a solicitação 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 solução de problemas deve focar na ordem das regras, prioridade, configuraçõ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á ausente ou desatualizado, o tempo de imunidade da sessão terminou ou o compartilhamento de token não está configurado para fluxos multidomínio.

Para desenvolvedores de sites: Defina o tempo de imunidade CAPTCHA ou Challenge de acordo com o comportamento real dos usuários, 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 continuem bloqueando tráfego legítimo após a CAPTCHA ser resolvida.

Para usuários do CapMonster Cloud: Use dados de tarefa frescos da página de destino, passe o resultado no formato necessário via cookie aws-waf-token ou 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.