Blog
CAPTCHA e desafio no AWS WAF | Como resolvê-lo ao fazer raspagem na Web

CAPTCHA e desafio no AWS WAF | Como resolvê-lo ao fazer raspagem na Web

Logo of Capsolver

CapSolver Blogger

How to use capsolver

20-Jun-2024

Como muitas empresas e usuários de web scrapers sabem, o AWS WAF (Web Application Firewall) é uma solução poderosa de segurança projetada para proteger aplicações web contra ataques cibernéticos comuns e vulnerabilidades. Uma das principais características é o uso de CAPTCHA e desafios para diferenciar entre usuários legítimos e possíveis bots maliciosos. Embora isso aumente a segurança, também cria obstáculos significativos e alguns problemas indesejados para o web scraping. Neste artigo, exploramos os CAPTCHA e desafios no AWS WAF e discutimos como contornar esses obstáculos para garantir uma operação tranquila de web scraping e atividades empresariais.

Compreendendo CAPTCHA e desafios do AWS WAF

Como é sabido, o AWS WAF utiliza CAPTCHA e desafios como parte de sua estratégia de defesa para impedir ataques automatizados e acessos não autorizados. Essas medidas são destinadas a verificar se o usuário interagindo com a aplicação web é um humano e não um bot. Por exemplo, se a solicitação do seu web scraper parecer suspeita, o AWS WAF pode apresentar um CAPTCHA ou desafio.

Cansado de falhar constantemente em CAPTCHAs irritantes?

Descubra a solução automática de CAPTCHA com IA fornecida pelo CapSolver!

Use o código promocional para obter a solução de CAPTCHA de primeira linha; CapSolver: WEBS. Ao usar o código promocional, você receberá um bônus adicional de 5% em cada depósito, sem limitações.

  1. Conformidade de Endereço IP

O Amazon WAF pode usar o roteamento entre domínios sem classe (CIDR) para configurar até 10.000 intervalos de endereços IP para cada condição de conformidade de IP. Cada lista é limitada a esse limite. Listas de permissões, listas de negação (componentes de lista de IPs criadas manualmente) e listas de bloqueio de IPs de terceiros (componentes de solução de lista de IPs) são listas separadas, cada uma limitada a 10.000 endereços IP. É possível modificar manualmente as listas de permissões e negações, adicionando ou removendo endereços IP conforme necessário.

  1. Implementação de Armadilhas em Aplicações Web

Será criada uma endpoint raramente visitada como uma armadilha para detectar e desviar scrapers de conteúdo e bots maliciosos. Usuários comuns não tentarão acessar essa endpoint. No entanto, scrapers de conteúdo e bots maliciosos (como malware que faz varredura de vulnerabilidades e coleta de dados) podem tentar acessar a armadilha. Nesse caso, a Amazon verificará a solicitação para determinar sua origem e, em seguida, atualizará as regras relevantes do Amazon WAF para bloquear solicitações subsequentes desse endereço IP.

Além disso, a AWS geralmente usa três tipos de CAPTCHA:

  1. Aqui está um exemplo de CAPTCHA com uma grade de imagens. Este CAPTCHA exige selecionar todas as imagens contendo objetos específicos.

  2. Outro tipo comum de CAPTCHA é mostrado abaixo. Neste exemplo, é necessário identificar o ponto final do caminho de um carro na imagem.

  3. O último tipo é o CAPTCHA de áudio, que usa o princípio de sobreposição de ruído de fundo na voz. Claro, como em quebra-cabeças, se você tiver a abordagem correta, o CAPTCHA de áudio também pode ser resolvido automaticamente.

Como reconhecer o AWS WAF?

  1. Verificação dos cabeçalhos de resposta da solicitação de URL

Ao solicitar um URL, se o código de status da resposta for geralmente 405 e o cabeçalho da resposta contiver os campos X-Amzn-Waf-Action: captcha e X-Amzn-Errortype: ForbiddenException, isso significa que o acesso atual está bloqueado pelo AWS WAF.

  1. Aparência na resposta HTML

Se a resposta HTML contiver linhas como awsWaf ou captcha.awswaf.com, isso significa que é necessário processar o CAPTCHA da AWS.

<script type="text/javascript">
window.awsWafCookieDomainList = [];
window.gokuProps = {
    "key":"AQIDAHjcYu/*****",
    "iv":"CgAHfjMvRjAAAA3q",
    "context":"MK7Z1IlZc****"
};
</script>
<script src="https://***.token.awswaf.com/***/challenge.js"></script>
<script src="https://***.captcha.awswaf.com/****/captcha.js"></script>

Dicas para contornar o WAF

Podemos usar CapSolver para resolver automaticamente os desafios de maneira legítima. CapSolver é um serviço que fornece soluções para reconhecimento de CAPTCHA. Ele oferece vários tipos de tarefas para diferentes sistemas CAPTCHA, incluindo WAF.

CapSolver fornece dois serviços para resolver CAPTCHA que ajudam você a contornar o WAF facilmente. Um é usar a API do CapSolver, e o outro é baixar a extensão.

Siga meus passos para implementar a resolução automática no web scraping. É muito simples, vamos nos aprofundar!

Passo 1. Login

Você pode se registrar no CapSolver e acessar nossos serviços de CAPTCHA, que atualmente estão disponíveis para uso gratuito.

Passo 2. Obtenha sua API gratuita!

Depois de se registrar, você poderá obter sua chave API no painel principal.

Exemplo de código

Para obter um aws-waf-token válido usando código, você pode usar linguagens de programação populares como Python, Go, JavaScript. Aqui está um exemplo de como obter o token usando Python:

# pip install requests
import requests
import time

api_key = "YOUR_API_KEY"  # TODO: sua chave API do capsolver
site_url = "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest"  # TODO: URL do seu site

def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'AntiAwsWafTaskProxyLess',
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("Failed to create task:", res.text)
        return
    print(f"Got taskId: {task_id} / Getting result...")

    while True:
        time.sleep(1)  # delay
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('cookie')
        if status == "failed" or resp.get("errorId"):
            print("Solve failed! response:", res.text)
            return

token = capsolver()
print(token)

Em breve, você verá que a saída conterá o necessário aws-waf-token.

Got taskId: 373a6363-c03f-48d5-85eb-05e553980a64 / Getting result...
2d8415fb-43ec-42c5-8106-c51194d5eb14:EQoAljIa3jkRAAAA:Z+bkUZcJEl90QIM46acsmio......

Em seguida, verifique se o token aws-waf-token realmente funciona.

def check_website(token):
    headers = {
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "accept-language": "en-US,en;q=0.9,sq;q=0.8,ak;q=0.7,ar;q=0.6,an;q=0.5,az;q=0.4,ab;q=0.3,fr-CA;q=0.2,fi;q=0.1,fr;q=0.1",
        "cookie": token,
    }
    res = requests.get(site_url, headers=headers)
    print(f"Got response {res.status_code}")
    print(f"Cookies: {res.cookies}")

check_website(token)

Conclusão

Embora os CAPTCHA e desafios do AWS WAF possam ser

eficazes para evitar atividades maliciosas, eles também podem interferir na atividade legítima de web scrapers. No entanto, ao entender como o AWS WAF funciona e usando soluções como o CapSolver, você pode contornar esses obstáculos e garantir uma operação de web scraping tranquila. Lembre-se de que tanto a segurança quanto a conformidade legal são importantes, então, ao implementar qualquer solução automatizada, siga as normas legais e éticas aplicáveis.

Mais