DataDome CAPTCHA
ve CapMonster Cloud

CAPTCHA çözümü, siteye kurulum ve testler.

DataDome CAPTCHA çözümünün fiyatlandırması

CAPTCHA
Fiyat (USD)
$ 2.20
1000 jeton
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/150.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
<span class="font-bold">Server-Side Key</span> sadece sunucuda saklanmalı; istemciye gönderilmemelidir.
Engelleme nedenlerini izlemek için olay kaydını <span class="font-bold">logger</span> veya <span class="font-bold">blocked/valid</span> listener ile açın.
Form sayfalarına kullanıcı şeffaflığı için <span class="font-bold">Gizlilik Politikası</span> ve <span class="font-bold">DataDome Kullanım Koşulları</span> 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)

DataDome hakkında sık sorulan sorular

En belirgin gösterge, sunucu yanıtlarındaki datadome cookie'sidir:

  1. DataDome ile korunan siteyi bir tarayıcıda açın (Chrome, Firefox).
  2. F12'ye basın (geliştirici araçları) → Application sekmesine gidin → Cookies.
  3. Sitenin alan adını bulun (ör. www.example.com).
  4. Cookie'ler arasında datadome anahtarını arayın

Ayrıca sitenin isteklerinde geliştirici araçları → Network sekmesinde geo.captcha-delivery.com çağrıları olup olmadığını kontrol edebilirsiniz; bu endpoint DataDome'un challenge teslim altyapısına aittir.

Resmi paketi yükleyin:

npm install @datadome/module-express

İstemciyi içe aktarın ve başlatın:

const { DatadomeExpress } = require('@datadome/module-express')

sonra

new DatadomeExpress('YOUR_SERVER_SIDE_KEY')

Middleware'i bağlayın:

app.use(datadomeClient.middleware())

Çoğu durumda middleware, istekler route işleyicilerinize ulaşmadan önce analiz edilebilmesi için korumalı route'lardan önce kaydedilmelidir. Uygulama yapınıza bağlı olarak middleware'i belirli route'lara veya route gruplarına seçici olarak da uygulayabilirsiniz.

Minimal kurulum olarak bu örneği kullanın:

const { DatadomeExpress } = require('@datadome/module-express');
const express = require('express');
const app = express();

// Initialize DataDome client
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY');

// Connect middleware
app.use(datadomeClient.middleware());

// Your routes
app.get('/', (req, res) => {
  res.send('Hello World');
});

// Start server
app.listen(3000, () => {
  console.log('Server running on port 3000');
})

Resmi modül ayrıca gelişmiş entegrasyonlar için ek yapılandırma ve özelleştirme seçeneklerini destekler.

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

DataDome'un doğru yapılandırılıp yapılandırılmadığını kontrol etmek için şu üç testi deneyin:

  1. DataDome JS Tag olmadan korumalı bir sayfayı ziyaret edin. Entegrasyon beklendiği gibi çalışıyorsa bir CAPTCHA challenge almalısınız.
  2. k6 veya JMeter gibi araçlarla otomatik trafiği simüle edin. DataDome bu etkinliği algılamalı ve bir challenge ile yanıt vermelidir.
  3. Çözülmüş bir datadome cookie'sini başka bir IP adresinden yeniden kullanın. Bu çalışmamalı ve DataDome bunun yerine yeni bir CAPTCHA challenge göstermelidir.

DataDome çözümü başarısız olursa, en yaygın nedenler şunlardır:

  • ERROR_CAPTCHA_UNSOLVABLE: createTask parametreleri yanlış. Proxy'niz DataDome CAPTCHA tarafından engellenmiş olabilir. İstek için kullandığınız proxy sunucusunu değiştirin. İstekte gönderdiğiniz parametreleri tekrar kontrol edin. Hata tekrarlanırsa destekle iletişime geçin ve şunları belirtin: taskId, görev türü (type), orijinal görüntü veya giriş verileri, görevin tarihi/saati ve istek gövdesi.
  • ERROR_KEY_DOES_NOT_EXIST: clientKey'iniz yanlış veya etkin değil. CapMonster Cloud hesabınızdaki anahtarı kontrol edin.
  • ERROR_PROXY_READ_TIMEOUT: Proxy çok yavaş veya güvenilmez. Başka bir proxy deneyin. Bu hata ayrıca createTask isteğinde yanlış metadata.captchaUrl nedeniyle de oluşabilir. Captcha bağlantısını tekrar kontrol edin.
  • Servisten alınan cookie'ler hedef sitede çalışmıyor: Çözüm isteği ve son istek farklı IP'lerden gönderildi. Her ikisi için de aynı IP'yi kullanın. Ayrıca cookie kurulumunun doğruluğunu kontrol edin; dönen datadome cookie'sinin tarayıcınızda veya istek başlıklarında doğru şekilde ayarlandığından emin olun.

HTTP istekleri için çözülmüş değeri, korumalı alan adına yapılan her sonraki istekte Cookie istek başlığında datadome=<value> olarak ekleyin.

Puppeteer, Selenium veya Playwright gibi tarayıcı otomasyon araçlarında korumalı sayfayı açmadan önce framework'ün yerleşik cookie yöntemini kullanarak datadome cookie'sini ekleyin.

Örneğin:

  • Playwright'ta context.addCookies() kullanın.
  • Puppeteer'da page.setCookie() kullanın.
  • Selenium'da driver.add_cookie() kullanın.

Cookie'nin doğru alan adı ve yol için ayarlandığından emin olun. Tarayıcının bunu normal bir oturum cookie'si gibi işlemesi için bu yöntemleri httpOnly: true, secure: true ve sameSite: 'Lax' ile de kullanın.