DataDome Algılama Mekanizmaları: Scraping Mühendisleri İçin Teknik Derinlemesine İnceleme

DataDome'un TLS fingerprinting, canvas hash, JA3/JA4 ve davranışsal analitiği nasıl kullandığını öğrenin. Meşru otomasyon için residential proxy + stealth browser yapılandırmasını adım adım inceleyin.

DataDome Algılama Mekanizmaları: Scraping Mühendisleri İçin Teknik Derinlemesine İnceleme

DataDome Engelini Anlamak: Scraping Mühendisinin Karşılaştığı Sorun

SERP izleme, fiyat karşılaştırma veya güvenlik araştırması için veri toplarken karşılaştığınız 403 Forbidden veya "Please verify you are a human" sayfaları büyük ihtimalle DataDome arkasından geliyor. DataDome, 300+ ülke ve bölgede faaliyet gösteren, bot trafiğini algılamak için çok katmanlı bir sinyal yığını kullanan köklü bir bot koruma sağlayıcısıdır.

Bu yazıda, DataDome algılama mekanizmalarını parçalayarak inceleyecek ve meşru otomasyon için temiz geçiş stratejilerini ele alacağız. Amaç hiçbir zaman kötüye kullanımı kolaylaştırmak değil; yetkili pentesting, güvenlik araştırması ve meşru veri toplama süreçlerinin nasıl düzgün yapılandırılacağını açıklamaktır.

DataDome'un Algılama Yığını: Katman Katman İnceleme

DataDome'un gücü tek bir sinyale dayanmıyor. Aksine, her katmandan gelen veriyi birleştirerek bir "güven skoru" hesaplıyor ve bu skor eşik değerini aştığında CAPTCHA veya blok tetikliyor.

1. IP İtibarı ve ASN Analizi

DataDome, ticari IP veritabanları (MaxMind, IP2Location vb.) ve kendi historical veritabanını kullanarak IP'leri sınıflandırır:

  • ASN analizi: DigitalOcean, AWS, OVH, Hetzner gibi bilinen datacenter ASN'leri otomatik olarak yüksek riskli işaretlenir. Bir /24 bloğundan gelen yoğun istek dizisi, ASN'i "hosting" olarak etiketler.
  • ISP sınıflandırması: Residential IP'ler ISP, mobile IP'ler MOB kategorisinde değerlendirilir. Datacenter IP'ler DC kategorisindedir ve doğrudan yüksek risk skoru alır.
  • Geolokasyon tutarsızlığı: IP'nin coğrafi konumu ile Accept-Language, Timezone, navigator.language uyumsuzsa şüphe artar.

2. TLS Fingerprinting: JA3 ve JA4

DataDome'un en güçlü erken uyarı sistemlerinden biri TLS fingerprinting'dir. İstemci sunucuya henüz HTTP isteği göndermeden, TLS el sıkışması sırasında parmak izi alınır.

JA3, Client Hello mesajındaki şu alanların MD5 hash'ini hesaplar:

  • TLS sürümü
  • Desteklenen cipher suite'leri (sıralama önemli)
  • Desteklenen TLS uzantıları
  • Desteklenen elliptic curve'ler
  • Elliptic curve point formatları

JA4+, JA3'ün geliştirilmiş versiyonudur: cipher sayısını, uzantı sayısını ve ALPN protokollerini dahil eder. Örneğin, bir Python requests oturumu şu JA4 üretir:

# Python requests + urllib3 JA4 örneği
# JA4: t13d1516h2_8daaf6152771_e5627efa5ab1
# Cipher sıralaması: TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, ...
# Bu sinyal, gerçek Chrome tarayıcısından farklıdır
# ve DataDome tarafından "bot" olarak sınıflandırılır.

Gerçek Chrome 120+ şu cipher sıralamasını kullanır:

TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-CHACHA20-POLY1305-SHA256

Python requests veya Go net/http kütüphaneleri bu sıralamayı üretmez. DataDome, bilinen bot JA3/JA4 hash'lerini bir veritabanında tutar ve eşleşme durumunda doğrudan bloklar.

3. Tarayıcı Parmak İzi: Canvas, WebGL, Audio, Navigator

DataDome, istemci tarafında çalışan JavaScript snippet'i ile kapsamlı bir tarayıcı profili oluşturur:

  • Canvas fingerprinting: Gizli bir <canvas> elementine metin ve şekiller çizer, ardından toDataURL() çıktısının hash'ini alır. Farklı GPU'lar, sürücüler ve font rendering motorları farklı hash'ler üretir. Headless Chrome, canvas rendering'de küçük farklar yaratır.
  • WebGL: WEBGL_debug_renderer_info uzantısından GPU vendor ve renderer bilgilerini toplar. VirtualBox veya VMware GPU'ları otomatik olarak şüpheli işaretlenir.
  • AudioContext fingerprint: OfflineAudioContext ile osilatör sinyali üretip, çıktıdaki kaydırma değerlerinin hash'ini alır. Headless ortamlarda ses işleme farklılık gösterir.
  • Navigator sinyalleri: navigator.webdriver (true ise direkt blok), navigator.plugins (boş ise şüpheli), navigator.languages (tek dil veya boş ise şüpheli), screen.colorDepth, deviceMemory eksikliği.

4. Davranışsal Sinyaller: Fare Dinamiği, Kaydırma, Zipleme

DataDome'un sunucu tarafı davranışsal analizi, kullanıcının sayfayla etkileşim modelini inceler:

  • Fare hareketi: İnsan fare hareketi doğal olarak Bezier eğrileri oluşturur; botlar doğrusal veya hiç hareket etmez. DataDome, mousemove event'larının hızını, ivmesini ve yön değiştirme sıklığını analiz eder.
  • Kaydırma (scroll): Doğal kaydırma düzensiz hızlanma/yavaşlama gösterir. Anlık scrollTo veya sabit hızlı kaydırma bot sinyali verir.
  • Zamanlama: Sayfa yükleme ile ilk etkileşim arasındaki süre, istekler arası gecikme, form doldurma hızı — hepsi bir model oluşturur.
  • Keyboard dinamiği: Tuşlar arası geçiş süresi (dwell time), doğal yazım hızındaki dalgalanmalar.

datadome Çerezi ve CAPTCHA Akışı

DataDome'un çalışma mekanizması şu adımları izler:

  1. İlk istek: Kullanıcı siteye erişir. DataDome'un sunucu tarafı modülü (NGINX, Apache, Cloudflare worker) isteği değerlendirir.
  2. Sunucu tarafı değerlendirme: IP itibarı + TLS fingerprint + HTTP başlık analizi ile hızlı bir güven skoru hesaplanır.
  3. JS challenge: Skor belirsiz ise, yanıtta DataDome JavaScript enjekte edilir. Bu JS, yukarıda sayılan tüm tarayıcı fingerprint sinyallerini toplar ve /js/ endpoint'ine gönderir.
  4. datadome çerezi: Başarılı değerlendirme sonucunda datadome çerezi set edilir. Bu çerez, sonraki isteklerde taşınır ve doğrudan geçiş sağlar.
  5. CAPTTCHA tetikleme: Güven skoru düşük ise, DataDome CAPTCHA (genellikle hCaptcha veya kendi özel CAPTCHA'sı) gösterir. CAPTCHA çözüldükten sonra datadome çerezi verilir.
  6. Çerez yenileme: Çerez süresi dolduğunda veya IP değiştiğinde süreç başa döner.

Önemli: datadome çerezi IP adresine bağlıdır. Farklı bir IP ile aynı çerezi kullanmak, çerezin geçersiz kılınmasına neden olur.

Neden Residential ve Mobile Proxy'ler Kritiktir

DataDome, datacenter IP aralıklarını agresif şekilde işaretler. Bir AWS veya DigitalOcean IP'sinden gelen istek, JA3/JA4 sinyali ne kadar temiz olursa olsun, yüksek olasılıkla bloklanır.

Proxy TürüDataDome Algılama RiskiSticky OturumGeolokasyon DesteğiEn İyi Kullanım
DatacenterÇok YüksekYokSınırlıHiçbir DataDome korumalı site için uygun değil
ResidentialDüşükVar (sticky session)Ülke + ŞehirSERP izleme, fiyat karşılaştırma, güvenlik araştırması
Mobile (3G/4G/5G)Çok DüşükVarÜlke + OperatörSosyal medya araştırması, yüksek güvenlikli hedefler

Residential proxy'ler, gerçek ISP'ler üzerinden bağlantı sağladığı için ASN analizi sırasında "hosting" etiketi almaz. Mobile proxy'ler ise en düşük risk skoruna sahiptir çünkü mobil operatör IP'leri, DataDome'un beyaz listesinde öncelikli yer alır.

ProxyHat üzerinden residential proxy yapılandırması:

# ProxyHat residential proxy - ülke hedeflemeli
# HTTP proxy formatı
http://kullanici-country-US:parola@gate.proxyhat.com:8080

# Şehir düzeyinde hedefleme
http://kullanici-country-DE-city-berlin:parola@gate.proxyhat.com:8080

# Sticky oturum (datadome çerezi için gerekli)
http://kullanici-country-US-session-abc123:parola@gate.proxyhat.com:8080

Meşru Otomasyon İçin Stealth Browser Yapılandırması

DataDome'dan temiz geçiş için üç bileşenin uyumlu çalışması gerekir: temiz TLS fingerprint, temiz tarayıcı fingerprint ve residential proxy.

Playwright + Stealth Plugin Yapılandırması

Aşağıdaki örnek, Playwright ile stealth modda çalışacak ve ProxyHat residential proxy kullanacak şekilde yapılandırılmıştır:

from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync
import time
import random

PROXY_URL = "http://kullanici-country-US-session-rpt42:parola@gate.proxyhat.com:8080"

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False,  # DataDome headless modu algılar
        proxy={"server": PROXY_URL},
        args=[
            "--disable-blink-features=AutomationControlled",
            "--disable-features=IsolateOrigins,site-per-process",
        ]
    )
    context = browser.new_context(
        viewport={"width": 1920, "height": 1080},
        locale="en-US",
        timezone_id="America/New_York",
        geolocation={"latitude": 40.7128, "longitude": -74.0060},
        permissions=["geolocation"],
        user_agent=(
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/125.0.0.0 Safari/537.36"
        ),
    )
    page = context.new_page()
    stealth_sync(page)  # navigator.webdriver, plugins, vs. düzeltir

    # İnsan benzeri gecikme ile gezinme
    time.sleep(random.uniform(2, 5))
    page.goto("https://hedef-site.com", wait_until="domcontentloaded")

    # Doğal kaydırma simülasyonu
    page.mouse.move(random.randint(100, 800), random.randint(100, 600))
    time.sleep(random.uniform(0.5, 1.5))
    page.evaluate("window.scrollTo(0, document.body.scrollHeight / 3)")
    time.sleep(random.uniform(1, 3))

    # datadome çerezini yakala
    cookies = context.cookies()
    datadome_cookie = next(
        (c for c in cookies if c["name"] == "datadome"), None
    )
    if datadome_cookie:
        print(f"datadome çerezi alındı: {datadome_cookie['value'][:20]}...")
    else:
        print("datadome çerezi alınamadı - engellenmiş olabilirsiniz")

    browser.close()

Node.js + Puppeteer Extra ile Stealth Yapılandırma

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

const PROXY_URL = 'http://kullanici-country-US-session-node99:parola@gate.proxyhat.com:8080';

(async () => {
    const browser = await puppeteer.launch({
        headless: 'new',
        args: [
            `--proxy-server=${PROXY_URL}`,
            '--disable-blink-features=AutomationControlled',
            '--no-sandbox',
        ],
    });

    const page = await browser.newPage();
    await page.setViewport({ width: 1920, height: 1080 });
    await page.setUserAgent(
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' +
        'AppleWebKit/537.36 (KHTML, like Gecko) ' +
        'Chrome/125.0.0.0 Safari/537.36'
    );

    // İnsan benzeri bekleme
    await page.goto('https://hedef-site.com', { waitUntil: 'domcontentloaded' });
    await new Promise(r => setTimeout(r, 2000 + Math.random() * 3000));

    // Doğal etkileşim
    await page.mouse.move(Math.random() * 800, Math.random() * 600);
    await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight / 3));

    // datadome çerezini kontrol et
    const cookies = await page.cookies();
    const datadome = cookies.find(c => c.name === 'datadome');
    if (datadome) {
        console.log('datadome çerezi alındı:', datadome.value.substring(0, 20) + '...');
    } else {
        console.log('datadome çerezi alınamadı');
    }

    await browser.close();
})();

curl ile Residential Proxy Testi

Hızlı bir IP ve bağlantı testi için:

# ProxyHat residential proxy ile IP doğrulama
curl -x "http://kullanici-country-US:parola@gate.proxyhat.com:8080" \
     -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
     -H "Accept: text/html,application/xhtml+xml" \
     -H "Accept-Language: en-US,en;q=0.9" \
     "https://hedef-site.com" -v 2>&1 | grep -i "datadome\|set-cookie\|HTTP/"

# SOCKS5 ile bağlantı (daha düşük algılama riski bazı senaryolarda)
curl -x "socks5://kullanici-country-US-session-test1:parola@gate.proxyhat.com:1080" \
     "https://hedef-site.com" -v

Temiz Geçiş İçin Yapılandırma Kontrol Listesi

DataDome'dan tutarlı şekilde geçiş sağlamak için şu bileşenlerin uyumlu olması gerekir:

  • TLS fingerprint uyumu: Kullanılan tarayıcının JA3/JA4 hash'i, User-Agent başlığında belirtilen tarayıcıyla eşleşmeli. Chromium tabanlı bir UA kullanıyorsanız, gerçek Chromium TLS el sıkışması gönderilmelidir.
  • Geolokasyon tutarlılığı: Proxy IP'sinin ülkesi, Accept-Language, timezone ve navigator.language ile tutarlı olmalı. ABD IP'si + Almanca timezone = yüksek risk skoru.
  • Sticky session: datadome çerezi IP'ye bağlıdır. Her istekte IP değiştirmek çerezi geçersiz kılar. ProxyHat'ta session- parametresiyle en az 10-15 dakika sabit IP kullanın.
  • İnsan benzeri hız: Saniyede 10 istek yerine, istekler arası 2-8 saniye rastgele gecikme ekleyin.
  • Headless algılama önleme: navigator.webdriver=false, gerçek viewport, gerçek plugins listesi, gerçek fonts.

Etik Çerçeve: Meşru Erişim ve Sınırlar

DataDome, siteleri kötüye kullanıma, credential stuffing'e, scalping'e ve DDoS'a karşı korur. Bu meşru bir güvenlik ihtiyacıdır. Meşru otomasyon çalıştıran mühendisler olarak, şu ilkelere bağlı kalmalıyız:

  • Rate limitlere saygı: Dakikada 5-10 istek, çoğu SERP ve fiyat izleme senaryosu için yeterlidir. Saniyede 50 istek atmak, ne kadar temiz olursa olsun, sunucu kaynaklarını tüketir.
  • CAPTTCHA çözücüler kullanmayın: CAPTCHA, sitenin "burada dur" sinyalidir. Otomatik CAPTCHA çözümü, hem etik değil hem de çoğu zaman geçici bir çözümdür.
  • robots.txt'e saygı: Eğer robots.txt belirli yolları yasaklıyorsa, o yolları scrapememelisiniz.
  • GDPR ve KVKK uyumu: Kişisel veri topluyorsanız, ilgili veri koruma mevzuatına uymak zorundasınız.
  • Yetkili pentesting: Bir siteyi güvenlik araştırması için test ediyorsanız, yazılı yetki belgesi alın.

DataDome Ne Zaman "Resmi API Kullanın" Demektir?

Bazı durumlarda, DataDome koruması neredeyse geçilemez olabilir ve bu, sitenin bilerek tasarladığı bir duvardır:

  • Büyük haber yayıncıları: Reuters, Bloomberg, Financial Times gibi siteler, içeriklerine erişim için resmi API'ler sunar. DataDome, bu içeriğin toplu olarak çekilmesini engellemek için tasarlanmıştır.
  • Bazı e-ticaret platformları: Amazon, akademik veya küçük ölçekli veri erişimi için Product Advertising API sunar.
  • Sosyal medya: X (Twitter), Meta ve LinkedIn resmi API'ler sunar — ancak kısıtlamalıdır.

Eğer bir site, verisine erişmek için resmi bir API sunuyorsa ve API'nın maliyeti/kısıtlamaları kabul edilebilir ise, her zaman resmi API'yi tercih edin. API, daha kararlı, daha hızlı ve hukuki olarak daha güvenlidir.

DataDome koruması altındaki bir site için scraping ve resmi API karşılaştırması:

KriterResmi APIScraping (Residential Proxy)
İstikrarYüksek (SLA var)Orta (site değişebilir)
HızYüksek (optimize edilmiş)Düşük (render + proxy overhead)
MaliyetAylık ücret veya ücretsiz katmanProxy maliyeti + geliştirme
Hukuki riskYok (ToS uyumlu)Var (ToS ihlali olabilir)
Veri kapsamıSınırlı (API ne verirse)Tam (sayfa ne gösterirse)
BakımDüşükYüksek (site değişiklikleri)

Daha fazla scraping senaryosu için web scraping kullanım senaryoları sayfamızı inceleyebilirsiniz.

ProxyHat ile DataDome Korumalı Sitelere Erişim Stratejisi

ProxyHat'ın residential ve mobile proxy ağları, DataDome'un IP itibarı filtrelerinden geçecek şekilde tasarlanmıştır. İşte stratejik yaklaşım:

  1. Doğru proxy türünü seçin: DataDome korumalı siteler için her zaman residential veya mobile proxy kullanın. Datacenter proxy'ler, JA3/JA4 sinyali ne kadar temiz olursa olsun, yüksek olasılıkla bloklanır.
  2. Geo-match yapın: Hedef sitenin ana kitlesinin bulunduğu ülkeye uygun proxy seçin. Örneğin, bir Alman e-ticaret sitesi için country-DE kullanın.
  3. Sticky session kullanın: datadome çerezi IP'ye bağlıdır. ProxyHat'ta session- parametresiyle en az 10-15 dakika sabit IP kullanın.
  4. Rotasyonu akıllı yapın: Her istekte IP değiştirmek yerine, bir oturum boyunca aynı IP'yi kullanın. Oturum sonunda yeni bir session ID ile yeni IP alın.
  5. Hızı sınırlayın: Dakikada 5-10 istek, çoğu senaryo için yeterlidir.

Fiyatlandırma detayları için ProxyHat fiyatlandırma sayfasını, mevcut lokasyonlar için proxy lokasyonları sayfasını inceleyin.

Temel Çıkarımlar

1. DataDome çok katmanlı algılama kullanır: IP itibarı, TLS fingerprinting (JA3/JA4), tarayıcı fingerprinting (canvas, WebGL, audio) ve davranışsal analitik. Tek bir katmanı geçmek yeterli değildir; tüm katmanları aynı anda aşmanız gerekir.

2. Datacenter IP'ler DataDome'da neredeyse her zaman bloklanır. Residential ve mobile proxy'ler, ASN analizi filtresini geçmek için zorunludur.

3. datadome çerezi IP'ye bağlıdır. Sticky session kullanın, her istekte IP değiştirmeyin.

4. TLS fingerprint uyumu kritiktir: Python requests veya Go net/http JA3/JA4 sinyali, gerçek tarayıcıdan farklıdır. Playwright/Puppeteer stealth modu kullanın.

5. Etik scraping, rate limitlere ve robots.txt'e saygı duyar. CAPTCHA, sitenin "dur" sinyalidir — çözücü kullanmayın.

6. Site resmi API sunuyorsa, scraping yerine API'yi tercih edin. Daha kararlı, daha hızlı ve hukuki olarak güvenlidir.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön