logo
bars

DataDome CAPTCHA
ve CapMonster Cloud

CAPTCHA çözümü, siteye kurulum ve testler.
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 DataDome CAPTCHA kullanıldığını fark ederseniz, bir sonraki adım özelliklerini ve çalışma şeklini daha ayrıntılı incelemek olacaktır. Yine bu makalede, DataDome CAPTCHA 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.

DataDome Nedir
DataDome Nedir
DataDome, ziyaretçi davranışlarını ve ağ parametrelerini analiz ederek gerçek kullanıcıları kötü amaçlı trafikten ayıran ve sitenizin veya uygulamanızın sorunsuz çalışmasını sağlayan bir bot ve otomatik saldırı koruma sistemidir.
Background
DataDome CAPTCHA örnekleri
Davranış analizi
Davranış analizi
Kullanıcı eylemlerinin değerlendirilmesi (tıklamalar, kaydırma, etkileşim hızı).
JavaScript kontrolü
JavaScript kontrolü
Tarayıcı ve ortamının gizli kontrolü.
Ağ kontrolü
Ağ kontrolü
IP adresleri, headerlar, proxyler ve bilinen bot ağlarının analizi.
Challenge
Challenge
Sistem şüphe duyarsa CAPTCHA gösterimi (genellikle 'bulmacayı tamamlamak için sağa kaydırın' slider olarak).

CapMonster Cloud ile DataDome CAPTCHA Nasıl Çözülür

DataDome korumasını test ederken, doğru entegre edildiğinden ve şüpheli trafiğe doğru tepki verdiğinden emin olmak önemlidir. Manuel kontrol için, DataDome ile korunan bir sayfayı açın ve sistemin aktif olduğunu doğrulayın.
Sayfayı çok sık yenileme veya geçersiz veri ile form gönderme gibi şüpheli davranışları taklit eden bir istek yapmayı deneyin — DataDome erişimi engellemeli veya koruma sayfası göstermelidir.
Otomatik test ve CAPTCHA çözümü için, örneğin CapMonster Cloud gibi özel servisleri kullanabilirsiniz — CAPTCHA parametrelerini kendi sunucularında işleyen ve hazır çözümü geri döndüren bir araç. Bu çözüm (token veya cookie), kullanıcı müdahalesi olmadan form veya tarayıcıya uygulanabilir.

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
Token'ı sayfaya yerleştirmeToken'ı sayfaya yerleştirme
arrow
Hazır kütüphanelerle DataDome CAPTCHA çözümü
CapMonster Cloud servisi, Python ve JavaScript (Node.js) için hazır kütüphaneler sunar.
Python
JavaScript
DataDome çözümü ve cookie ekleme
Node.js örneği, web sayfanızda CAPTCHA çözümünün tüm döngüsünü gösterir. Olası yaklaşımlar: HTML ve koruma sistemi parametrelerini almak için HTTP isteği, yanıt göndermek ve sonucu işlemek. Veya otomasyon araçlarıyla (ör. Playwright) — sayfayı aç, doğrulama bekle, CapMonster Cloud istemcisi üzerinden parametreleri gönder, sonucu al, cookie'yi tarayıcıya uygula (test için doğru ve yanlış veriler kullanılabilir) ve sonucu gör.

// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, DataDomeRequest } from '@zennolab_com/capmonstercloud-client';

// CapMonster Cloud API anahtarınızı girin
const API_KEY = 'YOUR_API_KEY';

// Siteniz DataDome ile korunuyor
const TARGET_URL = 'https://example.com/';

const USER_AGENT = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

// Proxy yapılandırması
const proxy = {
  proxyType: "http",
  proxyAddress: '8.8.8.8',
  proxyPort: 8080,
  proxyLogin: 'proxyLogin',
  proxyPassword: 'proxyPassword'
};

async function main() {

  // Tarayıcı başlatılıyor
  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext({ userAgent: USER_AGENT });
  const page = await context.newPage();

  // Siteye gidiliyor
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  // Mevcut datadome cookie aranıyor (varsa)
  const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));

  // DataDome iframe -> CAPTCHA URL'si aranıyor
  const captchaUrl = await page.evaluate(() =>
    Array.from(document.querySelectorAll('iframe[src]'))
      .find(i => /captcha-delivery\.com\/captcha/i.test(i.src))
      ?.src || null
  );

  console.log(`=== DataDome parametreleri çıkarıldı ===`);
  console.log(`captchaUrl:`, captchaUrl || 'bulunamadı');
  console.log(`Mevcut datadome cookie::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'yok');

  const cm = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: API_KEY })
  );

  // Görev CapMonster'a gönderiliyor
  console.log(`DataDome görevi CapMonster'a gönderiliyor......`);

  // DataDome çözüm görevi gönderiliyor
  const solve = await cm.Solve(new DataDomeRequest({
    _class: "DataDome",
    websiteURL: TARGET_URL,
    userAgent: USER_AGENT,
    proxy,
    metadata: {
      captchaUrl: captchaUrl || undefined,
      datadomeCookie: existingDd
        ? `${existingDd.name}=${existingDd.value}`
        : undefined
    }
  }));

  const sol = solve?.solution;

  // Çözümden alan ve gerekli cookie'ler alınıyor
  const host = new URL(TARGET_URL).hostname;
  const domainKey =
    Object.keys(sol.domains).find(d => d.includes(host))
    || Object.keys(sol.domains)[0];

  const cookiesArr = sol.domains[domainKey]?.cookies || [];

  console.log(`\n=== CapMonster cookie'leri ===`);
  cookiesArr.forEach(c => console.log(`${c.name}=${c.value}`));

  const ddSolved =
    cookiesArr.find(c => c.name?.toLowerCase() === 'datadome')
    || cookiesArr.find(c => /datadome/i.test(c.name));

  // Datadome cookie tarayıcıya kuruluyor
  await context.addCookies([{
    name: 'datadome',
    value: ddSolved.value,
    domain: '.' + host,
    path: '/',
    httpOnly: ddSolved.httpOnly ?? true,
    secure: ddSolved.secure ?? true,
    sameSite: ddSolved.sameSite ?? 'Lax'
  }]);

  console.log(`Datadome cookie kuruldu:`, ddSolved.value);

  // Cookie ekledikten sonra site tekrar açılıyor
  const page2 = await context.newPage();
  const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });

  console.log(`Cookie sonrası durum:: ${resp2?.status()}`);

  await browser.close();
}

main();
  
DataDome CAPTCHA'yı sitenize nasıl bağlarsınız
Sitenizde CAPTCHA'nın nasıl çalıştığını güvenle anlamak, doğrulama mantığını kavramak ve tekrar bağlamak veya yeniden yapılandırmak için bu bölümü incelemenizi öneririz. Koruma entegrasyonu süreci burada açıklanmıştır — tüm detayları hızlıca anlamanızı sağlar.

1. Hesabınıza giriş yapın veya kaydolun ve client-side ve server-side anahtarları alın.

Önemli: Kayıt için şirketinize ait kurumsal e-posta kullanın.

Kayıttan sonra yönetim paneline erişebilirsiniz.

2. Panelde siteyi (alan adını) ekleyin.

Sisteme alan adınızı ekleyin ve koruma parametrelerini seçin:

  • Web Koruması (HTTP trafiği koruması)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Challenge sayfaları (DataDome doğrulama sayfası)
  • JS tag configuration

3. Sunucu tarafında entegrasyonu kurun.

Protection API kullanın veya Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go vb. için hazır modül seçin.

Resmi DataDome SDK / middleware'i kurun, server-side key'i yapılandırın.

Node.js'de DataDome entegrasyon örneği:

DataDome sunucuyu botlardan ve şüpheli isteklerden korur, gerekirse challenge gösterir. Modül Express veya entegre HTTP sunucu ile kullanılabilir Node.js.

Kurulum

Express için:

npm install @datadome/module-express

Node.js HTTP modülü için:

npm install @datadome/module-http

Node.js 18+ desteklenir. DataDome panelinden sunucu anahtarı gereklidir.

Express entegrasyonuExpress entegrasyonu
arrow
Node.js HTTP sunucu entegrasyonuNode.js HTTP sunucu entegrasyonu
arrow

Modül ayarları

İstemci oluştururken yapılandırmayı geçebilirsiniz:


const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
  timeout: 150, // İsteğin geçmesine izin verilen ms cinsinden timeout
  urlPatternInclusion: null, // Hangi URL'ler kontrol edilecek
  urlPatternExclusion: /\.(avi|flv|mka|mkv|mov|mp4|mpeg|mpg|mp3|flac|ogg|ogm|opus|wav|webm|webp|bmp|gif|ico|jpeg|jpg|png|svg|svgz|swf|eot|otf|ttf|woff|woff2|css|less|js|map|json|avif|xml|gz|zip)$/i,
  endpointHost: 'api.datadome.co',
});

Gelişmiş seçenekler:

  • DataDome başlıklarını kaydetme (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • İstek metadata'sını handlers üzerinden geçersiz kılma

HelpIcon

Sunucu entegrasyonu hakkında daha fazla bilgi için resmi dokümantasyon.

4. İstemci tarafını bağlayın.

JS Tag'i sitenizin <head> kısmına ekleyin:


<head>
  <script>
    window.ddjskey = 'YOUR_DATADOME_JS_KEY';
    window.ddoptions = {
      // Ayarlarınızı buraya ekleyin (opsiyonel)
    };
  </script>
  <script src="https://js.datadome.co/tags.js" async></script>
  <!-- Diğer head öğeleri -->
</head>

YOUR_DATADOME_JS_KEY → Client-Side Key ile değiştirin.

Script <head>'in başında yüklenmeli, böylece DataDome istekleri yakalayabilir ve kullanıcı davranışını doğru şekilde izleyebilir.

Site CSP kullanıyorsa, aşağıdaki direktifleri ekleyin:

Inline script içinInline script için
arrow
Harici script yükleme içinHarici script yükleme için
arrow

HelpIcon

İstemci entegrasyonu hakkında daha fazla bilgi için DataDome CAPTCHA resmi dokümantasyon.

Sonuç kontrolü

DataDome, başarılı doğrulamadan sonra datadome= çerezini oluşturur. Bu çerez kullanıcı tarafından otomatik olarak gönderilir ve sunucu isteğe izin verir. Çerez yoksa veya geçersizse DataDome yeniden bir challenge gösterir.

Background
Olası hatalar ve hata ayıklama
Bug Icon
Geçersiz anahtar veya alan adı
DataDome siteyi doğru şekilde korumuyor; challenge görünmüyor. Doğru Server-Side Key kullanıldığından ve alan adının DataDome paneline eklendiğinden emin olun.
Bug Icon
İstek işleme zaman aşımı
Sunucu DataDome API'sinden yanıt bekleyemedi. Modül ayarlarında timeout değerini artırın.
Bug Icon
Boş token veya geçersiz parametre
Doğrulama sonucunu sunucuya gönderirken hata oluştu. Client JS Tag doğru kurulu ve ddtoken döndürüyor olmalı.
Bug Icon
Challenge tamamlanmadı
İstek şüpheli olarak işaretlendi veya token süresi doldu. Teşhis için modül parametresi logger üzerinden logging açın ve blocked/valid olaylarını izleyin.
Korumanın dayanıklılığını test etme
Güvenlik ve optimizasyon önerileri
<b>Server-Side Key</b> sadece sunucuda saklanmalı; istemciye gönderilmemelidir.
Engelleme nedenlerini izlemek için olay kaydını <b>logger</b> veya <b>blocked/valid</b> listener ile açın.
Form sayfalarına kullanıcı şeffaflığı için <b>Gizlilik Politikası</b> ve <b>DataDome Kullanım Koşulları</b> linkleri ekleyin.
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.

DataDome CAPTCHA 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, DataDome CAPTCHA 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
DocIconDataDome CAPTCHA DokümantasyonuDocIconCapMonster Cloud Dokümantasyonu (DataDome CAPTCHA ile çalışma)