In questo articolo abbiamo cercato di rispondere a tutte le domande principali. Il primo passo per risolvere il problema è capire quale sistema di protezione viene utilizzato. A questo scopo puoi consultare l’elenco dei captcha e dei sistemi di protezione antibot più diffusi, dove trovi esempi visivi e caratteristiche chiave che ti aiutano a identificare rapidamente con cosa hai a che fare.
Se scopri che sul tuo sito viene utilizzato Amazon AWS WAF, il passo successivo è analizzarne più nel dettaglio le proprietà e il funzionamento. In questo stesso articolo puoi anche studiare la guida all’integrazione di Amazon AWS WAF, per comprendere a fondo come opera sul tuo sito. Questo ti permetterà non solo di capire la protezione attuale, ma anche di pianificarne correttamente la manutenzione.
AWS WAF (Amazon Web Services Web Application Firewall) è un firewall per applicazioni web basato su cloud di Amazon, che protegge siti, API e applicazioni web da attacchi e traffico dannoso. In parole povere, è un filtro che si posiziona davanti al tuo sito o API e decide quale traffico di visitatori lasciar passare e quale bloccare.
Se sul sito è abilitato il Challenge/CAPTCHA, il visitatore potrebbe vedere una pagina di verifica separata. Gli verrà chiesto di completare un compito, ad esempio selezionare tutte le immagini di una categoria, per confermare di non essere un bot.
Quando si testano risorse protette da AWS WAF, è importante assicurarsi che la protezione funzioni correttamente e sia integrata nel modo giusto.
Puoi verificare manualmente il funzionamento della protezione:
Dopo aver superato con successo la verifica, AWS WAF imposta dei cookie che confermano che l'utente o il client ha superato il controllo e che il traffico fidato è consentito.
Per il riconoscimento automatico dei captcha è possibile utilizzare servizi specializzati, ad esempio CapMonster Cloud, uno strumento che accetta i parametri del captcha, li elabora sui propri server e restituisce cookie o token pronti. Questi possono essere inseriti nel browser per superare la verifica senza la partecipazione dell'utente.
Lavorare con CapMonster Cloud via API di solito prevede i seguenti passaggi:
Nella richiesta per risolvere AWS WAF è necessario indicare i seguenti parametri:
type - AmazonTask;
websiteURL - indirizzo della pagina principale in cui viene risolto il captcha;
challengeScript - link a challenge.js;
I seguenti parametri sono presi da window.gokuProps (tutti sono di tipo stringa):
captchaScript - link a captcha.js (può essere assente se hai solo un Challenge);
cookieSolution - di default false — nella risposta riceverai "captcha_voucher" ed "existing_token". Se hai bisogno dei cookie "aws-waf-token", indica true.;
userAgent - User-Agent del browser. Invia solo uno UA attuale del sistema operativo Windows;
Anche per questo compito è necessario l'uso dei tuoi proxy:
proxyType :
proxyAddress - Indirizzo IP del proxy IPv4/IPv6;
proxyPort - porta del proxy;
proxyLogin - login del server proxy;
proxyPassword - password del server proxy.
https://api.capmonster.cloud/createTask{
"clientKey": "API_KEY",
"task": {
"type": "AmazonTask",
"websiteURL": "https://example.com/index.html",
"websiteKey": "h15hX7brbaRTR...Za1_1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
"captchaScript": "https://234324vgvc23.yejk.captcha-sdk.awswaf.com/234324vgvc23/jsapi.js",
"cookieSolution": true,
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"cookies": {
"aws-waf-token": "10115f5b-ebd8-45c7-851e-cfd4f6a82e3e:EAoAua1QezAhAAAA:dp7sp2rXIRcnJcmpWOC1vIu+yq/A3EbR6b6K7c67P49usNF1f1bt/Af5pNcZ7TKZlW+jIZ7QfNs8zjjqiu8C9XQq50Pmv2DxUlyFtfPZkGwk0d27Ocznk18/IOOa49Rydx+/XkGA7xoGLNaUelzNX34PlyXjoOtL0rzYBxMAQy0D1tn+Q5u97kJBjs5Mytqu9tXPIPCTSn4dfXv5llSkv9pxBEnnhwz6HEdmdJMdfur+YRW1MgCX7i3L2Y0/CNL8kd8CEhTMzwyoXekrzBM="
},
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36"
}
}I dati ricevuti da CapMonster Cloud (cookie AWS WAF validi) possono essere inseriti nel contesto del browser o nel client HTTP. Dopodiché, il sito percepisce la richiesta come verificata e consente di continuare a lavorare senza ulteriori controlli o pagine di challenge.
Per l'automazione e i test è comodo usare Puppeteer, Selenium o Playwright, in quanto permettono di:
In questo modo è possibile verificare la correttezza del funzionamento della protezione e assicurarsi che il sito accetti ed elabori correttamente i cookie AWS WAF validi.
Importante: questi esempi di codice utilizzano cookieSolution=False. Se come risultato hai bisogno di ottenere i cookie, imposta cookieSolution=True.
// 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";
// Impostazioni proxy
const PROXY = {
proxyType: "http",
proxyAddress: "PROXY_HOST",
proxyPort: 1234,
proxyLogin: "PROXY_USER",
proxyPassword: "PROXY_PASS"
};
(async () => {
// 1) Apriamo la pagina tramite proxy e raccogliamo i parametri 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" });
// attendiamo il caricamento degli script 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"));
});
// estraiamo i parametri AWS WAF (chiave, context, iv, link agli script)
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) Risolviamo AWS WAF tramite 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) Inseriamo aws-waf-token e puliamo quelli vecchi
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();
// pulizia dei vecchi aws-waf-token per il tuo dominio
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);
// impostazione del nuovo 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();
})();
AWS WAF non può essere installato direttamente su un sito. Funziona solo tramite risorse AWS:
Passo 1. Crea un account AWS (se non ne hai uno)
Vai su: https://portal.aws.amazon.com/billing/signup. Crea l'account > conferma email e telefono.
Passo 2. Puoi usare l'interfaccia standard o la nuova interfaccia di AWS WAF:
Passo 3. Crea un pacchetto di protezione (web ACL)
Questo è l'insieme delle regole di protezione per la tua risorsa.
Passo 4. Configura la categoria dell'applicazione:
Nel blocco Tell us about your app:
Questi parametri sono necessari affinché AWS offra regole ottimali.
Passo 5. Seleziona le risorse da proteggere
Se il tuo sito è su CloudFront > seleziona CloudFront distributions
Se il tuo backend è su ALB > seleziona Regional resourcesSe API > seleziona API Gateway REST APISpunta la casella sulla risorsa necessaria > clicca su Add.
Passo 6. Seleziona un set di regole iniziale.
AWS offrirà:
Recommended for you — l'opzione migliore per i principianti
Include:Clicca su Next.
Passo 7. Configurazione (opzionale)
Nella schermata Customize protection pack (web ACL):
Parametri principali:
Logging
Scegli dove scrivere i log:
(si raccomanda S3 + Athena).
Passo 8. Creare Web ACL
Clicca su: Add protection pack (web ACL)
AWS creerà le regole e le collegherà alla tua risorsa.
Verifica
Per assicurarsi che la protezione funzioni:
In qualsiasi regola > Action > CAPTCHA / Challenge
Questo riduce il traffico dei bot e protegge le pagine di login e dei moduli.
Nella sezione Rule groups puoi aggiungere:
Se ti è capitato un sito con un captcha o un altro sistema di protezione già installato e senza accesso al codice, nessun problema! È piuttosto facile capire quale tecnologia viene utilizzata. Per verificare che tutto funzioni correttamente, puoi usare il servizio di riconoscimento CapMonster Cloud in un ambiente di test isolato, così da assicurarti che il meccanismo di elaborazione dei token e la logica di verifica funzionino correttamente.
Nel caso di Amazon AWS WAF, è sufficiente individuare il sistema, analizzarne il comportamento e assicurarsi che la protezione funzioni correttamente. Nell’articolo abbiamo mostrato come riconoscere Amazon AWS WAF e dove trovare le istruzioni per la sua integrazione o riconfigurazione, in modo da poter mantenere la protezione in modo affidabile e controllarne il funzionamento.