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.
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:
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 :
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/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"
}
}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:
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:
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:
3. Adım. Bir koruma paketi (Web ACL) oluşturun
Bu, kaynağınız için koruma kuralları setidir.
4. Adım. Uygulama kategorisini yapılandırın:
Tell us about your app bloğunda:
Bu parametreler, AWS'nin en uygun kuralları önermesi için gereklidir.
5. Adım. Korunacak kaynakları 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:Next butonuna tıklayın.
7. Adım. Yapılandırma (isteğe bağlı)
Customize protection pack (web ACL) ekranında:
Ana parametreler:
Günlük Tutma (Logging)
Günlüklerin nereye yazılacağını seçin:
(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:
Herhangi bir kuralda > Action > CAPTCHA / Challenge
Bu, bot trafiğini azaltır ve giriş ve form sayfalarını korur.
Rule groups bölümünde şunları ekleyebilirsiniz:
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.