W tym artykule staraliśmy się odpowiedzieć na wszystkie najważniejsze pytania. Pierwszym krokiem w rozwiązywaniu problemu jest ustalenie, jaki system ochrony jest używany. W tym celu możesz skorzystać z listy popularnych captcha i systemów ochrony antybotowej, gdzie znajdziesz przykłady graficzne oraz kluczowe cechy, które pomogą szybko rozpoznać, z czym masz do czynienia.
Jeśli okaże się, że na Twojej stronie używany jest Amazon AWS WAF, kolejnym krokiem będzie dokładniejsze poznanie jej właściwości i sposobu działania. W tym artykule możesz również zapoznać się z instrukcją integracji systemu Amazon AWS WAF, aby w pełni zrozumieć, jak funkcjonuje on na Twojej stronie. Dzięki temu nie tylko lepiej poznasz obecną ochronę, ale też świadomie zaplanujesz jej dalsze utrzymanie.
AWS WAF (Amazon Web Services Web Application Firewall) — to chmurowy firewall aplikacji internetowych od Amazon, który chroni strony, API i aplikacje internetowe przed atakami i szkodliwym ruchem. Mówiąc prościej, jest to filtr, który stoi przed Twoją stroną lub API i decyduje, jaki ruch odwiedzających przepuścić, a jaki zablokować.
Jeśli na stronie włączone jest wyzwanie (Challenge/CAPTCHA), odwiedzający może zobaczyć osobną stronę weryfikacyjną. Zostanie poproszony o wykonanie zadania, na przykład wybranie wszystkich obrazków z jednej kategorii, aby potwierdzić, że nie jest botem.
Podczas testowania zasobów chronionych przez AWS WAF ważne jest, aby upewnić się, że ochrona działa poprawnie i jest właściwie zintegrowana.
Możesz ręcznie sprawdzić działanie ochrony:
Po pomyślnym przejściu weryfikacji AWS WAF ustawia pliki cookie, które potwierdzają, że użytkownik lub klient przeszedł kontrolę i zaufany ruch jest dozwolony.
Do automatycznego rozpoznawania captcha można użyć wyspecjalizowanych usług, na przykład CapMonster Cloud — narzędzia, które przyjmuje parametry captcha, przetwarza je na swoich serwerach i zwraca gotowe pliki cookie lub token. Można je wstawić do przeglądarki, aby przejść weryfikację bez udziału użytkownika.
Praca z CapMonster Cloud poprzez API zazwyczaj obejmuje następujące kroki:
W zapytaniu o rozwiązanie AWS WAF należy podać następujące parametry:
type - AmazonTask;
websiteURL - adres strony głównej, na której rozwiązywana jest captcha;
challengeScript - link do challenge.js;
Następujące parametry są pobierane z window.gokuProps (wszystkie są typu string):
captchaScript - link do captcha.js (może go nie być, jeśli masz tylko Challenge);
cookieSolution - domyślnie false — w odpowiedzi otrzymasz "captcha_voucher" i "existing_token". Jeśli potrzebujesz plików cookie "aws-waf-token", ustaw wartość true.;
userAgent - User-Agent przeglądarki. Przesyłaj tylko aktualny UA z systemu operacyjnego Windows;
Również do tego zadania wymagane jest użycie Twoich serwerów proxy:
proxyType :
proxyAddress - Adres IP serwera proxy IPv4/IPv6;
proxyPort - port serwera proxy;
proxyLogin - login do serwera proxy;
proxyPassword - hasło do serwera 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"
}
}Dane otrzymane od CapMonster Cloud (prawidłowe pliki cookie AWS WAF) można wstawić do kontekstu przeglądarki lub klienta HTTP. Po tym strona postrzega zapytanie jako zweryfikowane i pozwala kontynuować pracę bez dodatkowych sprawdzeń lub stron typu challenge.
Do automatyzacji i testowania wygodnie jest używać Puppeteer, Selenium lub Playwright — pozwalają one:
W ten sposób można sprawdzić poprawność działania ochrony i upewnić się, że strona prawidłowo akceptuje i przetwarza ważne pliki cookie AWS WAF.
Ważne: te przykłady kodu używają cookieSolution=False. Jeśli w rezultacie musisz otrzymać pliki cookie, ustaw 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";
// Ustawienia proxy
const PROXY = {
proxyType: "http",
proxyAddress: "PROXY_HOST",
proxyPort: 1234,
proxyLogin: "PROXY_USER",
proxyPassword: "PROXY_PASS"
};
(async () => {
// 1) Otwieramy stronę przez proxy i zbieramy parametry 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" });
// czekamy na załadowanie skryptów challenge i 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"));
});
// wyciągamy parametry AWS WAF (klucz, context, iv, linki do skryptów)
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) Rozwiązujemy AWS WAF przez 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) Podstawiamy aws-waf-token i czyścimy stare
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();
// czyszczenie starych aws-waf-token dla twojej domeny
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);
// ustawienie nowego 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 nie można zainstalować bezpośrednio na stronie. Działa tylko za pośrednictwem zasobów AWS:
Krok 1. Utwórz konto AWS (jeśli go nie masz)
Przejdź do: https://portal.aws.amazon.com/billing/signup. Utwórz konto > potwierdź e-mail i telefon.
Krok 2. Możesz użyć interfejsu standardowego lub nowego interfejsu AWS WAF:
Krok 3. Utwórz pakiet ochrony (web ACL)
To jest zestaw reguł ochrony dla Twojego zasobu.
Krok 4. Skonfiguruj kategorię aplikacji:
W bloku Tell us about your app:
Te parametry są potrzebne, aby AWS zaproponował optymalne reguły.
Krok 5. Wybierz zasoby, które będą chronione
Jeśli Twoja strona jest na CloudFront > wybierz CloudFront distributions
Jeśli Twój backend jest na ALB > wybierz Regional resourcesJeśli API > wybierz API Gateway REST APIZaznacz odpowiedni zasób > kliknij Add.
Krok 6. Wybierz początkowy zestaw reguł.
AWS zaproponuje:
Recommended for you — najlepsza opcja dla początkujących
Zawiera on:Kliknij Next.
Krok 7. Konfiguracja (opcjonalnie)
Na ekranie Customize protection pack (web ACL):
Główne parametry:
Logowanie (Logging)
Wybierz, gdzie zapisywać logi:
(zalecane S3 + Athena).
Krok 8. Utwórz Web ACL
Kliknij: Add protection pack (web ACL)
AWS utworzy reguły i powiąże je z Twoim zasobem.
Weryfikacja
Aby upewnić się, że ochrona działa:
W dowolnej regule > Action > CAPTCHA / Challenge
Zmniejsza to ruch botów i chroni strony logowania oraz formularzy.
W sekcji Rule groups możesz dodać:
Jeśli przejąłeś stronę internetową, na której jest już zainstalowany captcha lub inny system zabezpieczeń, a jednocześnie nie masz dostępu do kodu — to nic strasznego! Dość łatwo jest ustalić, jaka dokładnie technologia jest używana. Aby sprawdzić poprawność działania, możesz skorzystać z usługi rozpoznawania CapMonster Cloud w odizolowanym środowisku testowym, żeby upewnić się, że mechanizm przetwarzania tokenów i logika weryfikacji działają prawidłowo.
W przypadku Amazon AWS WAF wystarczy rozpoznać system, przeanalizować jego zachowanie i upewnić się, że zabezpieczenie działa poprawnie. W artykule pokazaliśmy, jak zidentyfikować Amazon AWS WAF oraz gdzie znaleźć instrukcje dotyczące jego podłączenia lub ponownej konfiguracji, aby móc pewnie utrzymywać ochronę i kontrolować jej działanie.