Bu makalede tüm önemli sorulara cevap vermeye çalıştık. Bir problemi çözmeye başlamanın ilk adımı, hangi koruma sisteminin kullanıldığını belirlemektir. Bunun için, görsel örneklerin ve neyle karşı karşıya olduğunuzu hızlıca anlamanıza yardımcı olabilecek temel işaretlerin yer aldığı popüler captcha ve anti-bot koruma sistemleri listesine başvurabilirsiniz.
Sitenizde Amazon AWS WAF kullanıldığını fark ederseniz, bir sonraki adım özelliklerini ve çalışma şeklini daha ayrıntılı incelemek olacaktır. Yine bu makalede, Amazon AWS WAF sisteminin entegrasyonuna ilişkin kılavuzu da bulabilir ve böylece sitenizde nasıl çalıştığını tamamen anlayabilirsiniz. Bu da yalnızca mevcut korumayı anlamanıza değil, aynı zamanda bakımını doğru şekilde planlamanıza da yardımcı olur.
AWS WAF (Amazon Web Services Web Application Firewall), siteleri, API'leri ve web uygulamalarını saldırılardan ve zararlı trafikten koruyan, Amazon'un bulut tabanlı bir web güvenlik duvarıdır. Basitçe söylemek gerekirse, sitenizin veya API'nizin önünde duran ve hangi ziyaretçi trafiğine izin verileceğine, hangisinin engelleneceğine karar veren bir filtredir.
Eğer sitede Challenge/CAPTCHA etkinse, ziyaretçi ayrı bir doğrulama sayfası görebilir. Kendisine, örneğin bir kategorideki tüm resimleri seçmek gibi, bot olmadığını doğrulaması için bir görev yapması teklif edilecektir.
CapMonster Cloud ile AWS WAF nasıl çözülür
AWS WAF tarafından korunan kaynakları test ederken, korumanın doğru çalıştığından ve düzgün entegre edildiğinden emin olmak önemlidir.
Korumanın işleyişini manuel olarak kontrol edebilirsiniz:
- Form veya kaynağın bulunduğu sayfayı açın ve AWS WAF'ın isteklere doğru yanıt verdiğinden emin olun.
- WAF tarafından kısıtlanabilecek eylemleri gerçekleştirmeyi deneyin (örneğin toplu istekler, şüpheli başlıklar) — sunucu bu tür istekleri engellemeli veya bir hata döndürmelidir.
Doğrulama başarıyla geçildikten sonra, AWS WAF, kullanıcının veya istemcinin doğrulamayı geçtiğini ve güvenilir trafiğe izin verildiğini onaylayan çerezler (cookies) ayarlar.
Otomatik captcha tanıma için, örneğin CapMonster Cloud gibi captcha parametrelerini kabul eden, bunları sunucularında işleyen ve hazır çerezler veya token döndüren özel servisler kullanılabilir. Bunlar, kullanıcının katılımı olmadan doğrulamayı geçmek için tarayıcıya eklenebilir.
CapMonster Cloud API ile çalışma genellikle şu adımlardan oluşur:
AWS WAF çözümü isteğinde aşağıdaki parametrelerin belirtilmesi gerekir:
type - AmazonTask;
websiteURL - captcha'nın çözüldüğü ana sayfanın adresi;
challengeScript - challenge.js bağlantısı;
Aşağıdaki parametreler window.gokuProps'tan alınır (hepsi dize türündedir):
captchaScript - captcha.js bağlantısı (sadece Challenge varsa bu olmayabilir);
cookieSolution - varsayılan false — yanıtta "captcha_voucher" ve "existing_token" alırsınız. Eğer "aws-waf-token" çerezlerine ihtiyacınız varsa, true değerini belirtin.;
userAgent - Tarayıcı User-Agent'ı. Sadece Windows işletim sistemine ait güncel bir UA iletin;
Ayrıca bu görev için kendi proxy'lerinizi kullanmanız gereklidir:
proxyType :
- http - sıradan HTTP/HTTPS proxy;
- https - «http» çalışmıyorsa bu seçeneği deneyin (bazı özel proxy'ler için gereklidir);
- socks4 - SOCKS4 tipi proxy;
- socks5 - SOCKS5 tipi proxy;
proxyAddress - Proxy IP adresi IPv4/IPv6;
proxyPort - proxy portu;
proxyLogin - proxy sunucu kullanıcı adı;
proxyPassword - proxy sunucu şifresi.
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/150.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/150.0.0.0 Safari/537.36"
}
}CapMonster Cloud'dan alınan veriler (geçerli AWS WAF çerezleri) tarayıcı bağlamına veya HTTP istemcisine eklenebilir. Bundan sonra site, isteği doğrulanmış olarak algılar ve ek kontroller veya challenge sayfaları olmadan çalışmaya devam etmenize izin verir.
Otomasyon ve test için Puppeteer, Selenium veya Playwright kullanmak uygundur — şunları yapmanıza olanak tanırlar:
- AWS WAF ile korunan sayfayı açmak;
- alınan çerezleri tarayıcı bağlamına eklemek;
- sayfayı geçerli doğrulama ile yenilemek;
- sonraki işlemleri gerçekleştirmek (form göndermek, sayfalarda gezinmek, işlevselliği test etmek).
Böylece korumanın doğru çalıştığını kontrol edebilir ve sitenin geçerli AWS WAF çerezlerini doğru şekilde kabul edip işlediğinden emin olabilirsiniz.
Önemli: bu kod örnekleri cookieSolution=False kullanır. Sonuç olarak çerez almanız gerekiyorsa, cookieSolution=True olarak ayarlayın.
// 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";
// Proxy ayarları
const PROXY = {
proxyType: "http",
proxyAddress: "PROXY_HOST",
proxyPort: 1234,
proxyLogin: "PROXY_USER",
proxyPassword: "PROXY_PASS"
};
(async () => {
// 1) Sayfayı proxy üzerinden açıyoruz ve AWS WAF parametrelerini topluyoruz
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" });
// challenge ve captcha scriptlerinin yüklenmesini bekliyoruz
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"));
});
// AWS WAF parametrelerini çıkarıyoruz (anahtar, context, iv, script bağlantıları)
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) CapMonster Cloud üzerinden AWS WAF çözüyoruz
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) aws-waf-token yerleştiriyoruz ve eskileri temizliyoruz
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();
// alan adınız için eski aws-waf-token temizliği
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);
// yeni aws-waf-token ayarlama
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 doğrudan bir siteye kurulamaz. Yalnızca AWS kaynakları üzerinden çalışır:
- Amazon CloudFront (ana ve en iyi seçenek) — herhangi bir sitenin korunabileceği CDN. Hızlı ve küresel çalışır, neredeyse tüm durumlar için uygundur.
- Application Load Balancer (ALB) — AWS içindeki sunucu taraflı siteler, API'ler ve konteynerler için kullanılır. Backend'iniz EC2, ECS, EKS üzerinde çalışıyorsa — WAF'ı ALB'ye koyun.
- API Gateway — REST ve WebSocket API koruması. SPA, mobil uygulamalar ve mikro servisler için uygundur.
- AWS AppSync (GraphQL API)
- Amazon Cognito (giriş/kayıt)
- AWS App Runner (konteyner uygulamaları)
- AWS Amplify Hosting (frontend barındırma)
- AWS Verified Access (dahili uygulamalara erişim)
1. Adım. Bir AWS hesabı oluşturun (yoksa)
Adrese gidin: https://portal.aws.amazon.com/billing/signup. Hesap oluşturun > e-posta ve telefonunuzu doğrulayın.
2. Adım. Standart veya yeni AWS WAF arayüzünü kullanabilirsiniz:
- AWS konsoluna gidin
- AWS WAF'ı açın. Sol menüde Try the new experience (sunuluyorsa) seçeneğine tıklayın.
3. Adım. Bir koruma paketi (Web ACL) oluşturun
Bu, kaynağınız için koruma kuralları setidir.
- Soldaki menüden şunu seçin: Resources & protection packs (Web ACLs)
- Add protection pack (web ACL) butonuna tıklayın.
4. Adım. Uygulama kategorisini yapılandırın:
Tell us about your app bloğunda:
- App category — Web / API / Both seçin
- Traffic source — trafiğin nereden geldiği (web, API veya her ikisi)
Bu parametreler, AWS'nin en uygun kuralları önermesi için gereklidir.
5. Adım. Korunacak kaynakları seçin
- Add resources butonuna tıklayın
- Neyi bağladığınızı seçin:
Siteniz CloudFront üzerindeyse > CloudFront distributions seçin
Backend'iniz ALB üzerindeyse > Regional resources seçinAPI ise > API Gateway REST API seçinGerekli kaynağın üzerindeki kutucuğu işaretleyin > Add butonuna tıklayın.
6. Adım. Başlangıç kural setini seçin.
AWS şunları önerecektir:
Recommended for you — yeni başlayanlar için en iyi seçenek
Şunları içerir:- temel koruma
- SQLi ve XSS'e karşı kurallar
- IP reputation lists (IP itibar listeleri)
- Bot Control (isteğe bağlı)
- web/API kuralları
Next butonuna tıklayın.
7. Adım. Yapılandırma (isteğe bağlı)
Customize protection pack (web ACL) ekranında:
Ana parametreler:
- Default action:
- Allow all except blocked — genellikle bu seçilir
- Block all except allowed — site kapalıysa
- Default rate limits: İstek sayısı sınırı (DDoS L7 mitigation)
- IP addresses: Beyaz/kara listeler
- Country specific origins: Ülkelere göre trafik kısıtlaması
Günlük Tutma (Logging)
Günlüklerin nereye yazılacağını seçin:
- CloudWatch
- S3
- Firehose
(S3 + Athena önerilir).
8. Adım. Web ACL oluştur
Tıklayın: Add protection pack (web ACL)
AWS kuralları oluşturacak ve kaynağınıza bağlayacaktır.
Doğrulama
Korumanın çalıştığından emin olmak için:
- WAF'ı açın > web ACL'inizi seçin
- Monitoring sekmesine gidin
- Şunlara bakın:
- trafik grafikleri
- engellenen istekler
- örnek istekler (sample requests)
- CAPTCHA veya Challenge'ı etkinleştirin
Herhangi bir kuralda > Action > CAPTCHA / Challenge
Bu, bot trafiğini azaltır ve giriş ve form sayfalarını korur.
- Managed Rule Groups ekleyin
Rule groups bölümünde şunları ekleyebilirsiniz:
- AWS Managed
- Bot Control
- Account takeover prevention
- Marketplace rules (F5, Imperva, Fortinet)
- Shield Advanced ile bağlayın. DDoS (L3–L7) koruması için.
Desteklenen captchas
Kodu üzerinde erişiminiz olmayan, ancak üzerinde zaten bir captcha veya başka bir koruma sistemi kurulmuş bir site devraldıysanız, sorun değil! Hangi teknolojinin kullanıldığını tespit etmek oldukça kolaydır. Çalışmanın düzgün olup olmadığını kontrol etmek için ise, izole bir test ortamında CapMonster Cloud tanıma servisinden yararlanarak, jeton işleme mekanizmasının ve doğrulama mantığının doğru şekilde çalıştığından emin olabilirsiniz.
Amazon AWS WAF söz konusu olduğunda, sistemi tanımlamak, davranışını incelemek ve korumanın düzgün çalıştığını doğrulamak yeterlidir. Bu yazıda, Amazon AWS WAF nasıl tespit edilir ve entegrasyonu ya da yeniden yapılandırılması için talimatların nerede bulunabileceği gösterdik; böylece korumayı güvenle sürdürebilir ve çalışmasını kontrol altında tutabilirsiniz.