Cloudflare Turnstile İç İşleyişi ve Bot Management Güven Skoru: 2026 Derinlemesine Rehber

Cloudflare Turnstile iç işleyişi, JA4 TLS parmak izi, cf_clearance cookie ve dört sinyalli bot management güven skoru nasıl çalışır? Yasal scraping için ProxyHat residential proxy'lerle pratik bypass rehberi.

Cloudflare Turnstile Internals: How the 2026 Trust Score Works and How Legitimate Automation Passes

2026'da web scraping ve otomasyon mühendislerinin karşılaştığı en büyük engellerden biri Cloudflare'in Bot Management katmanıdır. Bir siteye bağlandığınızda karşınıza çıkan “Sınırsız erişim için devam ediliyor” mesajının arkasında Cloudflare Turnstile iç işleyişi yatar: görünmez JavaScript meydan okumaları, proof-of-work hesaplamaları ve tarayıcı API sondaları çalıştırılır. Bu rehber, Turnstile'ın teknik detaylarını ve dört sinyalli güven skorunu inceleyip, yasal erişim senaryoları için ProxyHat residential proxy'lerle nasıl temiz bir geçiş yapılacağını gösterir.

Yasal uyarı: Bu içerik yetkili güvenlik araştırması, genel erişime açık veri toplama ve yasal otomasyon içindir. Hesap ele geçirme, kimlik bilgisi kötüye kullanımı veya hizmet şartlarını ihlal eden faaliyetler CFAA (Bilgisayar Dolandırıcılığı ve İstismar Yasası) ve GDPR kapsamında suç teşkil edebilir. Her zaman hedef sitenin robots.txt dosyasını ve kullanım şartlarını kontrol edin.

Cloudflare Turnstile İç İşleyişi: Managed Challenge Gerçekte Ne Çalıştırır?

Cloudflare Turnstile, geleneksel CAPTCHA'ların yerine geçen, kullanıcı etkileşimi gerektirmeyen bir meydan okuma sistemidir. Ziyaretçi sayfayı açtığında, Turnstile'ın managed-challenge JavaScript'i yüklenir ve bir dizi görünmez test çalıştırır. Bu testlerin amacı, bağlantının gerçek bir tarayıcıdan gelip gelmediğini ve arkasında insan olup olmadığını belirlemektir.

Managed-Challenge JavaScript ve Proof-of-Work

Turnstile JavaScript'i yüklenirken şu adımları izler:

  • Ortam doğrulaması: navigator.webdriver, window.chrome, navigator.plugins ve benzeri API'ler kontrol edilir. Headless Chrome veya Puppeteer'ın varsayılan değerleri burada yakalanır.
  • Proof-of-Work (PoW): Tarayıcıya bir hash bulmacası verilir (genellikle SHA-256 tabanlı). Bu bulmaca, gerçek tarayıcının CPU'sunda 50–200ms sürede çözülür. Çözüm süresi ve doğruluğu, bağlantının gerçek bir cihazdan geldiğinin kanıtı olarak kullanılır.
  • Tarayıcı API sondaları: Canvas rendering, WebGL renderer bilgisi, AudioContext fingerprint, navigator.hardwareConcurrency, screen.width/height ve zamanlama API'leri toplanır. Bu değerler, bilinen bot framework'lerinin imzalarıyla karşılaştırılır.
  • Olay etkileşimi: Fare hareketleri, scroll olayları ve klavye etkileşimleri toplanır. Tamamen otomatik bağlantılarda bu olaylar ya hiç tetiklenmez ya da doğal olmayan desenler sergiler.

Bu testler tamamlandığında, Turnstile bir token üretir ve Cloudflare'in arka ucu bu token'ı doğrular. Doğrulama başarılı olursa, cf_clearance cookie mint edilir — bu cookie, kullanıcının bot olmadığını kanıtlayan ve sonraki isteklerde challenge gerektirmeyen bir geçiş biletidir.

cf_clearance Cookie: IP ve User-Agent Bağımlılığı

cf_clearance cookie'si iki kritik değere sıkı sıkıya bağlıdır:

  1. IP adresi: Cookie, mint edildiği IP adresine bağlanır. IP değişirse, cookie geçersiz olur.
  2. User-Agent: Cookie, mint edildiği User-Agent string'ine bağlanır. UA değişirse, cookie reddedilir.

Bu bağımlılık, proxy kullanıcıları için kritik bir anlam taşır: cf_clearance'ı bir IP üzerinden alıp başka bir IP üzerinden kullanamazsınız. Bu, proxy rotation stratejisini doğrudan etkiler ve cloudflare turnstile bypass girişimlerinde residential proxy kullanımını neredeyse zorunlu kılar.

cf_clearance cookie'si tipik olarak 30 dakika ila 2 saat arasında geçerlidir. Süre dolduğunda, meydan okuma yeniden çalıştırılmalıdır. Bazı siteler daha kısa süreler (örn. 15 dakika) ayarlayabilir.

Dört Sinyalli Güven Skoru: JA4, HTTP/2, Browser ve IP

Cloudflare Bot Management, bağlantıya bir güven skoru atar. Bu skor dört temel sinyalden oluşur. Her sinyal, bağlantının gerçek bir tarayıcıdan gelip gelmediğini farklı bir açıdan doğrular. Cloudflare bot management JA4 kontrolü bu skorun temel taşıdır.

1. JA4 TLS Parmak İzi

JA4, FoxIO tarafından geliştirilen bir TLS parmak izi standardıdır ve TLS ClientHello mesajındaki uzantıları (extensions) alfabetik olarak sıralayıp hash'leyerek benzersiz bir imza üretir.

JA4'ın önceki JA3'ten farkı, uzantıların sıralanmasıdır. JA3'te uzantılar ClientHello'daki göründükleri sırada hash'lenirdi, bu da farklı TLS kütüphanelerinin aynı tarayıcıyı farklı JA3 hash'leriyle temsil etmesine yol açıyordu. JA4'te ise uzantılar alfabetik sıralandığı için, aynı tarayıcı her zaman aynı JA4 hash'ini üretir.

JA4 hash'i şu bilgileri kodlar:

  • TLS sürümü (örn. t13 = TLS 1.3)
  • Desteklenen cipher suite'leri (sayı ve ilk değerleri)
  • Uzantıların alfabetik sıralanmış listesi
  • İmza algoritması listesi

Chrome 120'nin JA4 hash'i t13d1516h2_8daaf6152771_b186095e22b6 gibi bir değerdir. Python requests kütüphanesi ise tamamen farklı bir JA4 üretir çünkü OpenSSL'in cipher ve extension sıralaması Chrome'un BoringSSL'inden farklıdır. Bu fark, Cloudflare'in ilk saniyede yaptığı çapraz kontroldür.

2. HTTP/2 SETTINGS Frame'i

Cloudflare, HTTP/2 bağlantısının SETTINGS frame'ini de analiz eder. Her tarayıcı, HTTP/2 ayarlarını farklı değerlerle gönderir:

İstemci SETTINGS_HEADER_TABLE_SIZE SETTINGS_INITIAL_WINDOW_SIZE SETTINGS_MAX_CONCURRENT_STREAMS
Chrome 120 65536 6291456 1000
Firefox 121 65536 131072
Python httpx 4096 4194304

Bu değerlerin kombinasyonu, bağlantının hangi istemciden geldiğini yüksek doğrulukla belirler. Python HTTP kütüphaneleri, SETTINGS frame değerlerini tarayıcılarla eşleştirmese bile, JA4 hash'i zaten uyuşmazluk gösterir. Cloudflare bu iki sinyali birlikte değerlendirir ve tutarsızlık tespit ederse güven skorunu anında düşürür.

3. Tarayıcı Parmak İzi (Canvas / WebGL / Audio)

Turnstile JavaScript'i, tarayıcının donanım hızlandırma özelliklerini kullanarak benzersiz imzalar üretir:

  • Canvas fingerprint: Gizli bir canvas'a metin ve şekiller çizilir, sonuç piksel verisi hash'lenir. Farklı GPU'larda ve sürücülerde farklı hash'ler üretilir. Headless tarayıcılarda canvas hash'i yazılım render'ından geldiği için tespit edilebilir.
  • WebGL renderer: WEBGL_debug_renderer_info uzantısıyla GPU satıcısı ve model bilgisi alınır. “SwiftShader” veya “Google SwiftShader” gibi yazılım render'ları headless tarayıcı işaretidir. Gerçek bir GPU'da “ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0)” gibi bir değer beklenir.
  • AudioContext fingerprint: AudioContext API'siyle ses işleme test edilir. Headless tarayıcılarda ses alt sistemi ya yoktur ya da farklı davranır. OfflineAudioContext ile üretilen ses dalgasının hash'i donanıma özeldir.
  • Ek JavaScript sinyalleri: navigator.languages, navigator.deviceMemory, performance.memory (yalnızca Chromium), Date.now() çözünürlüğü ve Intl.DateTimeFormat().resolvedOptions().timeZone değerleri toplanır.

Bu imzalar, bilinen bot framework'lerinin imzalarıyla karşılaştırılır. Örneğin, Puppeteer'ın varsayılan navigator.webdriver = true değeri ve “HeadlessChrome” User-Agent'ı anında tespit edilir.

4. IP İtibarı

Cloudflare, bağlantının geldiği IP adresinin itibarını kontrol eder. Veri merkezi IP'leri (ASN tabanlı tespit), VPN sağlayıcıları ve bilinen proxy ağları otomatik olarak daha düşük güven skoru alır. Cloudflare'in bot yönetimi dokümantasyonuna göre, IP itibar skoru geçmiş davranış, ASN kategorisi ve coğrafi tutarlılık gibi faktörleri içerir.

Residential IP'ler, gerçek ISP'lerden tahsis edilmiş olduğu için, başlangıç güven skoru veri merkezi IP'lerine göre belirgin şekilde yüksektir. Veri merkezi IP'leri için güven skoru genellikle 10–30 aralığında başlarken, residential IP'ler 40–70 aralığında başlayabilir. Bu fark, Turnstile challenge'ının tetiklenip tetiklenmeyeceğini doğrudan belirler.

Chrome İddia Eden Python JA4'i Neden Anında Yakalanır?

Bu, scraping mühendislerinin sıkça düştüğü bir hatadır: User-Agent header'ını “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36” olarak ayarlayıp bağlantının Chrome'dan geldiğini iddia etmek. Ancak TLS el sıkışması bu iddiayı yalanlar.

Cloudflare'in kontrol sırası şöyledir:

  1. Layer 1 — TLS: JA4 hash'i alınır ve User-Agent ile çapraz kontrol edilir. Chrome UA iddia eden ama Python OpenSSL JA4 üreten bağlantı anında işaretlenir.
  2. Layer 2 — HTTP/2: SETTINGS frame değerleri tarayıcı imzalarıyla karşılaştırılır. Uyumsuzluk güven skorunu düşürür.
  3. Layer 3 — JS: Turnstile yüklenir ve tarayıcı API'leri kontrol edilir. Python requests'te JS motoru olmadığı için bu adım hiç çalışamaz — ki bu da bir işaretidir.
  4. Layer 4 — IP: Veri merkezi IP'si ise güven skoru zaten düşüktür.

Sonuç: User-Agent: Chrome + JA4: Python OpenSSL = anında challenge. Cloudflare bu tutarsızlığı “TLS sahtekarlığı” olarak sınıflandırır ve bağlantıyı doğrudan managed challenge'a yönlendirir. Turnstile internals açısından bu, en temel ve en sık tetiklenen tespit mekanizmasıdır.

cf_clearance Cookie Neden IP'ye Sabitlenir ve Residential Proxy Neden Kritiktir?

cf_clearance cookie'sinin IP'e sabitlenmesi, proxy mimarisini doğrudan belirler. Bir senaryo düşünelim:

  1. Veri merkezi proxy'si üzerinden Turnstile challenge'ı tamamlanır (eğer tamamlanabilirse).
  2. cf_clearance cookie'si alınır.
  3. Bir sonraki istek farklı bir veri merkezi IP'sine rotate edilir.
  4. cf_clearance cookie'si yeni IP'te reddedilir → challenge yeniden tetiklenir.

Bu döngü, veri merkezi proxy'lerle Cloudflare korumalı sitelere erişmeyi pratikte imkansız hale getirir. Çözüm, sticky residential sessions kullanmaktır.

Residential proxy'lerin avantajı iki katmanlıdır:

  • IP itibarı: Gerçek ISP IP'leri veri merkezi IP'lerine göre çok daha yüksek başlangıç güven skoru alır. Cloudflare, ASN veritabanıyla residential ve datacenter IP'lerini ayırt eder.
  • Kararlı çıkış IP'si: Sticky session ile aynı IP, tüm oturum boyunca korunur. cf_clearance bu IP'ye mint edilir ve tüm istekler bu IP üzerinden gider.

ProxyHat, residential proxy ağında sticky session desteği sunar. -session-abc123 flag'i ile aynı çıkış IP'si saatlerce korunabilir. Bu, cf_clearance cookie'sinin geçerliliği boyunca (tipik olarak 30–120 dakika) aynı IP'in kullanılmasını sağlar.

ProxyHat Sticky Residential Sessions ile Yasal Turnstile Geçişi

Aşağıdaki yaklaşım, yetkili otomasyon ve genel erişime açık veri toplama senaryoları içindir. Hedef sitenin kullanım şartlarına ve robots.txt kurallarına uyduğunuzdan emin olun. Web scraping kullanım senaryomuzu da inceleyebilirsiniz.

Adım 1: Sticky Residential Session ile Gerçek Tarayıcı

İlk adım, ProxyHat residential proxy üzerinden gerçek bir tarayıcı (Playwright veya Puppeteer) çalıştırmaktır. Amaç, Turnstile challenge'ını gerçek bir tarayıcıda tamamlamak ve cf_clearance cookie'sini almaktır.

# ProxyHat residential proxy - sticky session
# HTTP proxy: gate.proxyhat.com:8080
# SOCKS5 proxy: gate.proxyhat.com:1080

# Sticky session username format:
# user-session-abc123

# curl ile test
curl -x http://user-session-abc123:pass@gate.proxyhat.com:8080 \
  -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
  https://example.com/

Adım 2: Playwright ile cf_clearance Alma

Playwright, gerçek bir Chromium tarayıcısı çalıştırır. TLS el sıkışması Chrome'un BoringSSL'inden gelir, HTTP/2 SETTINGS frame'i gerçek Chromium değerlerini taşır ve JavaScript motoru tam fonksiyoneldir. Bu, JA4, HTTP/2 ve browser fingerprint sinyallerinin tümünün tutarlı olmasını sağlar.

from playwright.sync_api import sync_playwright

PROXY = {
    "server": "http://gate.proxyhat.com:8080",
    "username": "user-session-abc123",
    "password": "pass"
}

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False,  # Turnstile bazen headless'i tespit eder
        proxy=PROXY
    )
    context = browser.new_context(
        user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                   "AppleWebKit/537.36 (KHTML, like Gecko) "
                   "Chrome/120.0.0.0 Safari/537.36"
    )
    page = context.new_page()
    page.goto("https://example.com/")

    # Turnstile'in tamamlanmasini bekle
    page.wait_for_timeout(5000)  # 5 saniye

    # cf_clearance cookie'sini al
    cookies = context.cookies()
    cf_clearance = None
    user_agent = None
    for cookie in cookies:
        if cookie["name"] == "cf_clearance":
            cf_clearance = cookie["value"]
    
    if cf_clearance:
        print(f"cf_clearance: {cf_clearance}")
        # Bu cookie'yi sonraki isteklerde kullan

    browser.close()

Adım 3: cf_clearance'ı Sonraki İsteklerde Kullanma

cf_clearance alındıktan sonra, aynı sticky session IP'si üzerinden HTTP istekleri yapılabilir. Önemli: User-Agent ve IP aynı kalmalıdır. Aksi takdirde cookie geçersiz olur.

import requests

PROXY = "http://user-session-abc123:pass@gate.proxyhat.com:8080"
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/120.0.0.0 Safari/537.36",
    "Cookie": f"cf_clearance={cf_clearance}"
}

response = requests.get(
    "https://example.com/api/data",
    proxies={"http": PROXY, "https": PROXY},
    headers=HEADERS
)

print(f"Status: {response.status_code}")
print(f"Body: {response.text[:200]}")

Adım 4: SOCKS5 ile Daha İyi Performans

Bazı senaryolarda SOCKS5, HTTP proxy'den daha düşük latency sağlar. ProxyHat SOCKS5 portu 1080'dir:

# SOCKS5 proxy format
# socks5://user-session-abc123:pass@gate.proxyhat.com:1080

curl -x socks5://user-session-abc123:pass@gate.proxyhat.com:1080 \
  -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..." \
  https://example.com/

Geo-Targeting ile Ülke Seçimi

Cloudflare, IP'nin coğrafi konumunu da güven skoruna dahil eder. Hedef sitenin bulunduğu ülkeyle aynı ülkedeki residential IP kullanmak, güven skorunu artırır. Örneğin, Almanya merkezli bir siteye erişirken Alman IP'si kullanmak tutarlılık sinyali verir:

# ABD cikis IP'si
http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080

# Almanya cikis IP'si
http://user-country-DE-session-abc123:pass@gate.proxyhat.com:8080

# Sehir bazli hedefleme
http://user-country-DE-city-berlin-session-abc123:pass@gate.proxyhat.com:8080

Kullanılabilir lokasyonları ProxyHat lokasyonlar sayfasından kontrol edebilirsiniz.

Yaygın Hatalar ve Edge Case'ler

Hata 1: Headless Mode Kullanmak

Headless Chrome, birçok tespite açıktır. navigator.webdriver true döner, WebGL renderer “SwiftShader” olur ve bazı tarayıcı API'leri farklı davranır. Mümkün olduğunda headless=False kullanın. Headless modu zorunluysa, stealth eklentileri ile bazı tespit noktalarını azaltabilirsiniz, ancak Turnstile'ın gelişmiş sondalarını tamamen atlatmak zor olabilir.

Hata 2: IP Rotation ile cf_clearance Kullanmak

cf_clearance IP'e sabitlidir. Sticky session kullanmadan proxy rotate ederseniz, her istekte challenge tetiklenir. Sticky session zorunludur. Her oturum için benzersiz bir session ID kullanın (örn. -session-order123, -session-order456).

Hata 3: User-Agent Tutarsızlığı

cf_clearance alırken kullandığınız User-Agent'ı sonraki isteklerde de kullanmalısınız. UA değişirse cookie geçersiz olur. Playwright'da UA ayarladıysanız, requests'e geçtiğinizde aynı UA string'ini kullanın.

Hata 4: cf_clearance Süresinin Dolması

cf_clearance tipik olarak 30–120 dakika geçerlidir. Süre dolduğunda 403 veya 503 yanıtı alırsınız. Çözüm, cookie'yi yenilemek için tarayıcı oturumunu periyodik olarak yeniden çalıştırmaktır. cf_clearance'ın son kullanma tarihini takip edin ve süresi dolmadan yenileyin.

Hata 5: Çok Fazla Eşzamanlı İstek

Aynı IP üzerinden çok yüksek eşzamanlılık (örn. 100+ eşzamanlı bağlantı), Cloudflare'in rate limiting'ini tetikleyebilir. Eşzamanlılığı makul tutun (IP başına 5–10 eşzamanlı istek). Daha yüksek hacim için birden fazla sticky session paralel kullanın.

Hata 6: TLS Kütüphanesi Tutarsızlığı

Bazı geliştiriciler, curl-impersonate veya cycletls gibi araçlarla JA4 hash'ini Chrome ile eşleştirmeye çalışır. Bu, TLS katmanını geçebilir ama HTTP/2 SETTINGS ve JS katmanlarını geçmez. Eksik bir taklit, Cloudflare'in çok katmanlı kontrolünde yakalanır. En güvenilir yaklaşım, gerçek bir tarayıcı kullanmaktır.

Bu Yaklaşım Ne Zaman Uygundur?

Turnstile geçişi, aşağıdaki senaryolarda meşru ve uygundur:

  • Genel erişime açık veri toplama: Hedef sitenin robots.txt dosyası tarafından izin verilen ve giriş gerektirmeyen herkese açık sayfaların scrape edilmesi.
  • Yetkili güvenlik araştırması: Sızma testi sözleşmesi kapsamında, hedef kuruluşun izniyle yapılan güvenlik değerlendirmeleri.
  • SERP takibi: Arama motoru sonuç sayfalarının konum takibi için yasal SERP scraping. SERP takip rehberimizi inceleyin.
  • Fiyat monitoring: Kendi fiyatlandırma stratejisi için rakip fiyatlarının herkese açık ürün sayfalarından toplanması.

Aşağıdaki senaryolar uygun değildir:

  • Hesap ele geçirme veya kimlik bilgisi doldurma saldırıları.
  • Kullanıcıların özel verilerine izinsiz erişim (GDPR ihlali).
  • Hedef sitenin kullanım şartlarını açıkça ihlal eden faaliyetler (CFAA kapsamında).
  • Denial-of-service amaçlı yüksek hacimli istek gönderimi.

Önemli Çıkarımlar

Cloudflare Turnstile iç işleyişi dört katmanlı bir savunma sunar: JA4 TLS parmak izi, HTTP/2 SETTINGS, tarayıcı fingerprint'i ve IP itibarı. Bu katmanlardan herhangi birinin tutarsız olması, bağlantıyı anında challenge'a yönlendirir.

  • JA4 tutarlılığı zorunludur: User-Agent Chrome diyorsa, JA4 hash de Chrome'un hash'i olmalıdır. Python requests ile Chrome UA kullanmak işe yaramaz.
  • cf_clearance IP'e sabitlidir: Sticky residential session olmadan cf_clearance kullanılamaz. IP değişirse cookie anında geçersiz olur.
  • Gerçek tarayıcı gerekir: Turnstile challenge'ını geçmek için tam JavaScript motoru ve gerçek TLS stack gereklidir. Playwright veya Puppeteer kullanın.
  • Residential proxy şarttır: Veri merkezi IP'leri düşük güven skoru alır. Residential IP'ler, ProxyHat fiyatlandırması ile erişilebilir ve daha yüksek başlangıç güven skoru sağlar.
  • Yasal sınırlara uyun: Yetkili erişim, genel veri toplama ve güvenlik araştırması geçerlidir. Hesap kötüye kullanımı veya ToS ihlali yasa dışıdır.
  • Eşzamanlılığı yönetin: IP başına 5–10 eşzamanlı istek, rate limiting tetiklemeden makul bir hacim sağlar.

ProxyHat hakkında daha fazla bilgi için resmi dokümantasyonu inceleyebilir ve fiyatlandırma sayfasından ihtiyacınıza uygun planı seçebilirsiniz.

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