logo
bars

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#
python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import AmazonWafRequest
# from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo  # Descomente se planeja usar proxy
API_KEY = "YOUR_API_KEY"  # Indique sua chave de API do CapMonster Cloud
async def solve_amazon_waf_captcha():
    client_options = ClientOptions(api_key=API_KEY)
    cap_monster_client = CapMonsterClient(options=client_options)
    # Exemplo básico sem proxy
    # O CapMonster Cloud usa automaticamente seus próprios proxies
    amazon_waf_request = AmazonWafRequest(
        websiteUrl="https://example.com",  # URL da página protegida por AWS WAF
        challengeScript="https://example.com/path/to/challenge.js",  # Substitua pelo valor correto
        captchaScript="https://example.com/path/to/captcha.js",
        websiteKey="your_website_key",
        context="your_context_value",
        iv="your_iv_value",
        cookieSolution=False
    )
    # Exemplo de uso do seu próprio proxy
    # Descomente este bloco se quiser usar seu próprio proxy
    # proxy = ProxyInfo(
    #     proxyType="http",
    #     proxyAddress="127.0.0.1",
    #     proxyPort=8080,
    #     proxyLogin="username",
    #     proxyPassword="password"
    # )
    #
    # amazon_waf_request = AmazonWafRequest(
    #     websiteUrl="https://example.com",
    #     challengeScript="https://example.com/path/to/challenge.js",
    #     captchaScript="https://example.com/path/to/captcha.js",
    #     websiteKey="your_website_key",
    #     context="your_context_value",
    #     iv="your_iv_value",
    #     cookieSolution=False,
    #     proxy=proxy
    # )
    # Se necessário, você pode verificar o saldo
    balance = await cap_monster_client.get_balance()
    print("Balance:", balance)
    result = await cap_monster_client.solve_captcha(amazon_waf_request)
    print("Solution:", result)
asyncio.run(solve_amazon_waf_captcha())
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.
python
// 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 WAF →DocIconDocumentaçã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.