4 puan yazan GN⁺ 2026-03-30 | 1 yorum | WhatsApp'ta paylaş
  • ChatGPT’de mesaj gönderilirken Cloudflare Turnstile programı çalıştırılıyor; bu program yalnızca tarayıcı parmak izini değil, React uygulama durumunu da inceliyor
  • Şifresi çözülen program 55 özellik topluyor ve tarayıcı, ağ ve uygulama olmak üzere 3 katmanda doğrulama yapıyor
  • Yalnızca React render’ının tamamlandığı gerçek bir SPA ortamında geçilebiliyor; bu nedenle headless tarayıcılar veya basit bot istekleri başarısız oluyor
  • Toplanan parmak izi şifrelenerek OpenAI-Sentinel-Turnstile-Token biçimine dönüştürülüyor; buna ek olarak Signal Orchestrator ve Proof of Work modülleri de çalışıyor
  • Şifre çözme anahtarını yalnızca Cloudflare sunucuları bildiği için, gizlilik sınırı teknikten çok politika tarafından belirlenen bir yapıya dayanıyor

ChatGPT mesaj gönderiminde Cloudflare Turnstile çalışma yapısının analizi

  • ChatGPT’de her mesaj gönderiminde tarayıcı içinde Cloudflare Turnstile programı otomatik olarak çalışıyor
    • Ağ trafiğinde 377 Turnstile programının şifresi çözüldüğünde, bunun sıradan tarayıcı parmak izi toplamanın ötesine geçip React uygulama durumunu da denetlediği görülüyor
    • Basit tarayıcı parmak izi taklidi yapan botlar doğrulamayı geçemiyor; doğrulamayı geçmek için ChatGPT’nin SPA’sının (tek sayfa uygulaması) tamamen render edilmesi gerekiyor

Şifreleme yapısı ve şifre çözme süreci

  • Turnstile bayt kodu, sunucu yanıtındaki turnstile.dx alanı üzerinden iletiliyor ve her istekte 28.000 karakter uzunluğunda bir base64 dizgesi olarak şifrelenmiş durumda
    • Dış şifreleme katmanı p token’ı ve XOR işlemiyle çözülebiliyor; iki değer de aynı HTTP isteği içinde değiş tokuş ediliyor
    • Çözülen sonuç, 89 VM komutundan oluşan JSON biçimli bir bayt kodu
  • İçeride 19 KB boyutunda ek bir şifreli blob bulunuyor; bu blob farklı bir XOR anahtarıyla şifrelenmiş
    • Anahtar, bayt kodunun içindeki float literal değeri olarak (ör. 97.35) yer alıyor ve sunucu tarafından üretilip tarayıcıya gönderiliyor
    • 50 isteğin tamamında aynı yöntemle geçerli JSON çözümü doğrulanmış
  • Tüm şifre çözme süreci şu 5 adımdan oluşuyor
    1. İstekten p token’ını oku
    2. Yanıttan turnstile.dx alanını oku
    3. XOR(base64decode(dx), p) → dış bayt kodunu üret
    4. 19 KB blob’dan sonraki 5 argümanlı komuttan son argümanı anahtar olarak çıkar
    5. XOR(base64decode(blob), str(key)) → iç programın şifresini çöz (417~580 komut)

Şifresi çözülen programın denetim öğeleri

  • İç program, 28 komutlu (opcode) özel bir VM üzerinde çalışıyor ve her istekte kayan nokta register adresleri rastgele değiştiriliyor
  • Toplam 55 özellik (property) toplanıyor ve 377 örneğin tamamında aynı öğeler bulunuyor
  • Katman 1: Tarayıcı parmak izi

    • WebGL ile ilgili 8 özellik: UNMASKED_VENDOR_WEBGL, UNMASKED_RENDERER_WEBGL, WEBGL_debug_renderer_info vb.
    • Ekran bilgisi 8 öğe: colorDepth, pixelDepth, width, height, availWidth, availHeight, availLeft, availTop
    • Donanım 5 öğe: hardwareConcurrency, deviceMemory, maxTouchPoints, platform, vendor
    • Yazı tipi ölçümü 4 öğe: gizli bir div oluşturulduktan sonra fontFamily, fontSize, getBoundingClientRect, innerText ile render boyutu ölçülüyor
    • DOM gezinimi 8 öğe: createElement, appendChild, removeChild, style, position, visibility, ariaHidden vb.
    • Depolama 5 öğe: storage, quota, estimate, setItem, usage
      • Sonuçlar, sayfa yeniden yüklemeleri arasında kalıcı olması için localStorage içindeki 6f376b6560133c2c anahtarına kaydediliyor
  • Katman 2: Cloudflare ağı

    • Edge header 5 öğe: cfIpCity, cfIpLatitude, cfIpLongitude, cfConnectingIp, userRegion
    • Bu değerler yalnızca Cloudflare ağı üzerinden mevcut; doğrudan origin sunucuya erişen botlarda bu alanlar eksik kalıyor veya uyuşmayan değerler oluşuyor
  • Katman 3: Uygulama durumu

    • React iç yapısına ait 3 öğe: __reactRouterContext, loaderData, clientBootstrap
    • Bu öğeler yalnızca ChatGPT’nin React uygulaması tamamen render edildiğinde ve SSR hydration tamamlandığında mevcut oluyor
    • Sadece HTML yükleyen ya da JS bundle’ını çalıştırmayan headless tarayıcılar veya React’i gerçekten çalıştırmayan bot framework’leri başarısız oluyor

Token üretim süreci

  • 55 özellik toplandıktan sonra program, 116 baytlık şifreli blobun şifresini çözüp 4 son komutu çalıştırıyor
    • JSON.stringify(fingerprint)storeXOR(json, key)RESOLVE
    • Ortaya çıkan sonuç OpenAI-Sentinel-Turnstile-Token header’ına dönüştürülüyor ve tüm sohbet isteklerine ekleniyor

Sentinel’in ek bileşenleri

  • Turnstile dışında iki ek doğrulama modülü daha bulunuyor
  • Signal Orchestrator

    • 271 komuttan oluşuyor
    • keydown, pointermove, click, scroll, paste, wheel olay dinleyicileri kuruyor
    • window.__oai_so_* özelliklerinden 36 tanesini izleyerek tuşlama zamanlaması, fare hızı, kaydırma deseni, boşta kalma süresi, yapıştırma olayları gibi verileri takip ediyor
    • Parmak izi toplamaya ek olarak davranış tabanlı biyometrik kimlik doğrulama katmanı görevi görüyor
  • Proof of Work

    • 25 alanlı parmak izi + SHA-256 hashcash tabanlı
    • Zorluk derecesi 400K~500K aralığında eşit dağılımlı rastgele sayı; çözümlerin %72’si 5 ms’nin altında tamamlanıyor
    • ai, createPRNG, cache, solana, dump, InstallTrigger, data dahil 7 ikili tespit bayrağı içeriyor (100 örneğin tamamında 0)
    • Hesaplama maliyeti ekliyor ancak ana savunma aracı değil

Token’ın şifresini çözebilecek taraflar ve güvenlik anlamı

  • İç programın XOR anahtarı sunucu tarafından üretilip bayt koduna gömüldüğü için, anahtarı yalnızca turnstile.dx üreten sunucu biliyor
  • Kullanıcı ile sistem işletmecisi arasındaki gizlilik sınırı, kriptografik kısıtlardan değil politik tercihlerden kaynaklanıyor
  • Obfuscation’ın amacı
    • Parmak izi toplama öğelerini statik analizden gizlemek
    • Site işletmecisinin (OpenAI) ham parmak izi değerlerini doğrudan okuyamamasını sağlamak
    • Her token’ı benzersiz kılarak yeniden kullanımını (replay) önlemek
    • Cloudflare denetim öğelerini değiştirse bile bunun dışarıdan fark edilmesini zorlaştırmak
  • Ancak şifreleme, aynı veri akışı içindeki anahtar ve XOR işlemiyle yapıldığı için, bu yapı yalnızca analizi zorlaştıran bir obfuscation düzeyi sunuyor

Toplama ve analiz istatistikleri

Öğe Değer
Şifresi çözülen programlar 377/377 (100%)
Gözlemlenen benzersiz kullanıcı 32
Program başına özellik sayısı 55 (tamamı aynı)
Komut sayısı 417–580 (ortalama 480)
XOR anahtarı (50 örnek) 41
Signal Orchestrator özellikleri 36
Proof of Work alanları 25
PoW çözüm süresi %72’si 5 ms altı

Analiz metodolojisi

  • Yalnızca yasal yollarla toplanmış trafik kullanıldı
  • Kişisel kullanıcı verileri yayımlanmadı
  • Tüm trafik katılımcıların onayıyla gözlemlendi
  • Sentinel SDK (sdk.js, 1.411 satır) üzerinde manuel deobfuscation ve çevrimdışı şifre çözme yapıldı
  • Şifre çözme işlemi Python kullanılarak çevrimdışı ortamda gerçekleştirildi

1 yorum

 
GN⁺ 2026-03-30
Hacker News yorumları
  • Merhaba, ben OpenAI’nin Integrity ekibinde çalışan Nick’im
    Bu kontrol; botlar, scraping, dolandırıcılık ve benzeri platform kötüye kullanımlarını önlemeye yönelik koruma önlemlerinin bir parçası
    Amaç, ücretsiz ve giriş yapmamış kullanıcılara erişim sunmaya devam edebilmek için GPU kaynaklarını gerçek kullanıcılara öncelikli olarak ayırmak
    Sayfa yükleme süresi, ilk token’a kadar geçen süre, payload boyutu gibi metrikleri izliyoruz ve koruma önlemlerinin ek yükünü en aza indirmeye odaklanıyoruz
    Kullanıcıların çoğu için etkisi ihmal edilebilir düzeyde; yalnızca çok küçük bir kesim hafif gecikme yaşayabilir
    Ayrıca yanlış pozitif oranını düşürürken kötüye kullanımı zorlaştıran hassasiyet iyileştirmelerini de sürekli değerlendiriyoruz

    • OpenAI’nin scraping’i kötüye kullanım olarak görmesi ilginç
    • Bugünlerde temel hizmetleri kullanmak için tüm istemci doğrulamalarına izin veren bir tarayıcıya, bir de takipten korunmak için başka bir tarayıcıya ihtiyaç var gibi görünüyor
      Nick’in açıklamasını anlıyorum ama gizlilik ile işlevsellik arasında seçim yapmak zorunda kaldığımız bir dünyada yaşamaya devam edip etmeyeceğimizi merak ediyorum
    • Bununla ilgili olup olmadığını bilmiyorum ama uzun sohbetlerde Chat arayüzünün performansı çok kötüleşiyor
      yazı yazarken gecikme, render takılması, hatta tamamen donma oluyor
      Bunu hem iPhone 16 Safari’de hem de MacBook Pro M3 Chrome’da yaşıyorum
    • Yeni hesabın yalnızca iki yorum bırakmış olması, gerçekten insan mı yoksa OpenAI’yi savunan bir bot mu olduğu konusunda şüphe uyandırıyor
      Şaka yollu, Cloudflare’ın gizliliği ihlal eden araçlarını çalıştırıp sonucu paylaşması da önerilmiş
    • Bir OpenAI çalışanından doğrudan yanıt duymak güzel
      Ben Pro abonesiyim ve ekibim birlikte ayda 2.000 doların üzerinde harcıyor
      Ancak VPN (Mullvad) kullanırken, giriş yapmış olsam bile Chat arayüzü sık sık kopuyor ya da zaman aşımına uğruyor
      Ücretli kullanıcıların, VPN kullanıp kullanmadıklarına bakılmaksızın hizmeti istikrarlı biçimde kullanabilmesi iyi olurdu
  • Cloudflare’ın “şüpheli” tarayıcı veya IP gerekçesiyle web’i neredeyse kullanılamaz hâle getirdiğine dair bir şikâyet
    Sırf Firefox kullandığı için captcha cehennemine düştüğünü söylüyor

    • Cloudflare’ın “şüpheli” tanımı sürekli genişliyor
      VPN, gizlilik odaklı tarayıcılar, nadir IP blokları gibi unsurlar yüzünden gizliliğe önem veren kullanıcılar daha sık takılıyor
      Asıl botlar ise bu filtreleri kolayca aşıyor
    • Belki ağınızdan bilmediğiniz web trafiği çıkıp çıkmadığını kontrol etmeniz öneriliyor
      Kendisi Firefox kullanıyor ama yalnızca normal düzeyde captcha gördüğünü söylüyor
    • Firefox + Ublock Origin kullanıyorum ve neredeyse hiç captcha görmedim
      CGNAT kapalı; acaba farkı yaratan bu mu diye merak ediyor
    • Ödemeden hemen sonra arka arkaya 15 captcha çözmek zorunda kaldığı absürt bir deneyimi paylaşıyor
      Banka zaten kimliğini doğrulamışken, sitenin insan olup olmadığını ayırt edememesi ona mantıksız geliyor
  • OpenAI, giriş yapmamış kullanıcılara ücretsiz ChatGPT sunduğu için, bunun ücretsiz bir API gibi suistimal edilmesini önlemeye çalışıyor gibi görünüyor

    • Giriş yapmış olsun olmasın herkese bu tür doğrulamalar uygulanıp uygulanmadığı merak ediliyor
      Android uygulamasında Play Integrity kontrolü çalışıyor ama Claude uygulaması yalnızca giriş istiyor, böyle bir doğrulama yok
    • Giriş yapmadan da ChatGPT’nin çalıştığını gördüğünü paylaşıyor
      Çerez ya da hesap olmadan soru yazınca yanıt gelmesine şaşırdığını söylüyor
    • Bu tür korumalar, Pro abonelerinin kullanım modelini korumak için de gerekli
      API’ye kıyasla abonelik fiyatı çok daha ucuz olduğu için kötüye kullanımı önlemek gerekiyor
      SPA yükleme kontrolü gibi bir şey büyük bir engel değil; bunu fark edenlerin zaten aşacak teknik bilgisi vardır
      Başka şirketler de kendi anti-bot sistemlerini kuruyor
    • Ayda 20 dolara GPT‑5.2 kullanmak fiyat/performans açısından aşırı iyi, bir noktada fiyat ayarlaması gelebilir gibi görünüyor
    • copilot.microsoft.com da benzer bir Cloudflare tabanlı koruma kullanıyor gibi duruyor
  • ChatGPT’nin React uygulamasının tamamen render edilmesi gerektiği için belirli bir özelliğin ancak o zaman var olması ilginç
    Bu, tarayıcı seviyesinde değil uygulama katmanında bot tespiti anlamına geliyor
    Gelişmiş tespit sistemlerinin çoğunun zaten böyle çalıştığını sanıyordum; bu keşfin neden özel sayıldığını merak ediyorum

  • Yazının neden önemli olduğunu yazar daha net anlatmalıydı
    Sonuçta OpenAI’nin kullanıcıların resmî React uygulamasını kullanmasını istediği söyleniyor; bunun neden sorun olduğunu pek anlayamıyorum

    • Bu yüzden yazı ona yapay zeka tarafından yazılmış düşük kaliteli bir metin gibi gelmiş
  • Teknik açıdan ilginç
    Bildiğim kadarıyla Turnstile temelde siteye özel ayarlar gerektirmiyor; OpenAI’nin Turnstile verisini kendi API’siyle nasıl birleştirdiğini merak ediyorum

  • Bot işletenlerin neden doğrudan Windows 11 VM + Chrome çalıştırmadığını anlamadığını söyleyen bir görüş
    Bellek deduplikasyonu kullanılırsa aynı anda 50 VM çalıştırılabilir ve AWS fiyatlarıyla 1000 sayfa yükleme başına yaklaşık 1 sent gibi çok düşük bir maliyet çıkar diyor

    • Bu tür özellikleri zaten paket olarak sunan birçok hizmet var
      IP rotasyonu, konum sahteciliği, dil ayarları, yerleşik parser gibi seçenekler sunuyorlar ve geçiş maliyeti düşük olduğu için bunu kendin kurmanın anlamı az
    • Gerçekte bu VM tabanlı yaklaşımın maliyeti daha yüksek olduğundan bot sayısını azaltan caydırıcı bir etkisi var
      çünkü basit yöntemlere göre çok daha pahalı
    • Scraping ile ilgili Reddit topluluklarına bakarsanız, headless browser erişimi engellendiğinde bot geliştiricilerinin buna çok sinirlendiğini görürsünüz
      Önerildiği gibi Windows yerine Linux container kullanılırsa çok daha hafif ve verimli olur
    • GPU passthrough olmadan grafik hızlandırması iyi çalışan bir Windows 11 VM’i kolayca çalıştırmanın bir yolu varsa paylaşılmasını istiyor
  • ChatGPT’nin yazdığı izlenimi veren özensiz bir yazı olduğu eleştirisi

    • “Web bloglarının geleneksel özelliği, taslağın o kadar dağınık olması ki bir dil modelinin bile ikinci kez düzeltme yapması gerekmesi” diyerek şaka yapıyor
  • 2023~2024 döneminde KeepChatGPT adlı bir uzantı kullandığını söylüyor
    API olmadan da kullanıcıyı taklit ederek çalışabilmesi ilginç gelmiş
    Daha sonra Gemini’nin çıkışı ve sık hatalar nedeniyle kullanmayı bırakmış ama yapay zeka panelini sağ tarafa taşıma seçeneğini sevmiş
    KeepChatGPT GitHub bağlantısı

    • Kendisi WinForms WebView kullanarak ChatGPT’ye sorgu gönderen ve JSON yanıt alan küçük bir yardımcı uygulama kullanıyor
      Bu yöntem OpenAI’nin anti-bot sistemine hiç takılmıyor
  • Cloudflare ile uygulama arasındaki entegrasyonun standart Turnstile’ın ötesinde özel bir özellik mi yoksa yalnızca kurumsal sürüme mi ait olduğu soruluyor