logo
bars

Amazon AWS WAF
ve CapMonster Cloud

Captcha çözümü, siteye kurulum ve test etme.
Captcha veya başka bir koruma katmanı olan bir site devraldınız ama kaynak koda erişemiyor musunuz? O zaman hangi çözümün kurulu olduğunu, doğru ayarlanıp ayarlanmadığını ve nasıl test edileceğini bilmek istersiniz.

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.

Amazon AWS WAF nedir
Amazon AWS WAF nedir

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:

Görev oluşturmaGörev oluşturma
arrow
API isteği göndermeAPI isteği gönderme
arrow
Sonucu almaSonucu alma
arrow
Sayfaya aws-waf-token çerezlerinin yerleştirilmesiSayfaya aws-waf-token çerezlerinin yerleştirilmesi
arrow
Hazır kütüphaneler kullanılarak Amazon AWS WAF tanıma
CapMonster Cloud servisi, Python, JavaScript (Node.js) ve C# dillerinde rahat çalışma için hazır kütüphaneler sunar.

Önemli: bu kod örnekleri cookieSolution=False kullanır. Sonuç olarak çerez almanız gerekiyorsa, cookieSolution=True olarak ayarlayın.

Python
JavaScript
C#
Çözüm, parametrelerin alınması ve çerezlerin ayarlanması
Web sayfanızda tam captcha tanıma döngüsü için Node.js örneği. Olası yaklaşımlar: HTML ve koruma sistemi parametrelerini almak için HTTP isteklerini kullanmak, yanıtı göndermek ve sonucu işlemek. Veya otomasyon araçları yardımıyla (örneğin Playwright) — sayfayı açın, doğrulamayı bekleyin, parametreleri CapMonster Cloud istemcisi üzerinden gönderin, sonucu alın, çerezleri tarayıcıya ekleyin (test için hem doğru hem de hatalı verileri kullanabilirsiniz) ve sonucu görü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 sitenize nasıl bağlanır
Sitenizdeki captcha'nın çalışmasına güvenle hakim olmak, doğrulama mantığını anlamak, yeniden bağlamak veya yeniden yapılandırmak için bu bölümü incelemenizi öneririz. İçinde korumayı bağlama süreci açıklanmıştır — bu, tüm nüansları hızlıca anlamanıza yardımcı olacaktır.

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:

  1. AWS konsoluna gidin
  2. 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.

  1. Soldaki menüden şunu seçin: Resources & protection packs (Web ACLs)
  2. 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

  1. Add resources butonuna tıklayın
  2. Neyi bağladığınızı seçin:

Siteniz CloudFront üzerindeyse > CloudFront distributions seçin
Backend'iniz ALB üzerindeyse > Regional resources seçin
API ise > API Gateway REST API seçin
Gerekli 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:

  1. WAF'ı açın > web ACL'inizi seçin
  2. Monitoring sekmesine gidin
  3. Şunlara bakın:
    • trafik grafikleri
    • engellenen istekler
    • örnek istekler (sample requests)

Ek (isteğe bağlı)

  • 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.

Background
Olası hatalar ve hata ayıklama
Bug Icon
Geçersiz alan adı veya kural — Challenge görüntülenmiyor
AWS WAF WebACL'in doğru alan adına (CloudFront Distribution / ALB / API Gateway), doğru yola bağlı olduğundan ve kurallar arasında çakışma olmadığından emin olun.
Bug Icon
Sayfa yükleme veya doğrulama zaman aşımı
Bazen tarayıcı veya script AWS WAF yanıtını beklemez. Testlerdeki zaman aşımlarını (timeout) artırın ve backend'in istekleri gecikmeden işlediğinden emin olun.
Bug Icon
Süresi dolmuş AWS WAF çerezleri
Eski _aws_waf_token_… veya ilgili çerez etiketleri, tekrar eden Challenge'a veya geçici engellemeye yol açar.
Bug Icon
Aşırı hassas kurallar
Aşırı katı Bot Control imzaları, CAPTCHA kuralları veya Rate-based (hız tabanlı) kurallar gerçek kullanıcıları engelleyebilir.
Bug Icon
Hatalı WebACL yapılandırması
Kural sırasındaki, önceliklerdeki veya koşullardaki hatalar yanlış pozitiflere ve engellemelere yol açabilir.
Korumanın dayanıklılığını test etme
Entegrasyondan sonra sistemin gerçekten otomatik işlemleri engellediğinden emin olun.
Güvenlik ve optimizasyon önerileri
WebACL'i risk düzeyine göre yapılandırın. Managed Rules (AWS, AWS Marketplace), AWS Bot Control ve IP itibarı, başlıklar, hız sınırlaması ve diğer koşullara dayalı özel kurallar kullanın.
WAF olaylarını günlüğe kaydedin. Yanlış pozitif analizi ve kural optimizasyonu için <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> özelliğini etkinleştirin.
<b>Gizlilik Politikası</b> ve <b>Kullanım Koşulları</b> bağlantılarını ekleyin. Bu, şeffaflık ve güvenlik gereksinimlerine ve kullanıcı beklentilerine uyum için önemlidir.
Sonuç

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.

Conclusion
Faydalı bağlantılar
DocIconAWS WAF DokümantasyonuDocIconCapMonster Cloud Dokümantasyonu (AWS WAF ile çalışma)DocIconAWS WAF ile web kaynaklarını korumaya genel bakış