Kasada Anti-Bot Sistemi Nasıl Çalışır?
Kasada anti-bot açıklaması ile başlayalım: Kasada, istemci tarafı JavaScript zorlukları, TLS parmak izi analizi ve IP itibar puanlamasını birleştiren çok katmanlı bir bot tespit platformudur. 2026 itibarıyla, Fortune 500 şirketlerinin önemli bir kısmı tarafından kullanılan platform, geleneksel CAPTCHA yerine görünmez zorluklar (invisible challenges) tercih eder. Bir kullanıcı sayfayı yüklediğinde, Kasada'nın ips.js betiği arka planda çalışır, bir dizi fingerprint toplar ve şifrelenmiş bir payload üretir. Bu payload sunucu tarafından doğrulanır; geçersizse 429 Too Many Requests yanıtı ve x-kpsdk-ct başlığı döndürülür.
Senior scraping ekipleri için kritik nokta şudur: Kasada'nın tespiti tek bir kontrol noktasına dayanmaz. TLS handshake aşamasında başlayan süreç, HTTP/2 çerçeve sıralaması, JavaScript yürütümü ve IP/ASN analizi ile katmanlanır. Bu nedenle cihaz parmak izi spoofing'i tek başına yeterli değildir; tüm katmanların tutarlı olması gerekir. Kasada bypass girişimleri, bu katmanlardan herhangi birinde tutarsızlık yakalarsa anında başarısız olur.
ips.js ve Bytecode VM Mimarisi
Kasada'nın çekirdeği, ips.js adlı yaklaşık 449 KB boyutunda bir JavaScript dosyasıdır. Bu dosya standart bir JS betiği değil; özel bir bytecode VM (sanal makine) içerir. VM'in çalışma prensipleri şunlardır:
- Encode edilmiş string tablosu: Tüm string sabitleri (URL'ler, fonksiyon adları, hata mesajları) çok katmanlı obfuscation ile gizlenmiştir. VM bunları yalnızca runtime'da decode eder; statik analiz ile string'leri görmek son derece zordur.
- Zaman tabanlı seed'ler: VM,
Date.now()veperformance.now()değerlerini toplayarak her oturum için benzersiz bir seed üretir. Bu seed, payload şifrelemesinde kullanılır ve token'ın yaklaşık 5 dakika içinde geçersiz hale gelmesini sağlar. - Bütünlük kontrolü (integrity checksum): VM, kendi kaynak kodunun hash'ini hesaplar. Eğer bir otomasyon aracı VM'i patch'lemeye çalışırsa (örneğin
navigator.webdriverdeğerini override etmek için), checksum uyuşmaz ve payload geçersiz olur. - Anti-debugging: VM,
debuggertuzakları, fonksiyontoString()kontrolleri ve timing analizleri ile reverse engineering girişimlerini tespit eder. Bir debugger tespit edildiğinde, VM kasıtlı olarak yanıltıcı payload üretir.
VM çalıştığında, tarayıcının canvas, WebGL, AudioContext, navigator ve screen API'lerinden veri toplar. Bu veriler birleştirilerek bir browser+device fingerprint oluşturulur. Bu fingerprint, Canvas API kullanılarak üretilen görsel hash'ler, WebGL renderer bilgileri ve font listeleri ile zenginleştirilir. Sonuç, şifrelenmiş ve rotasyonlu bir payload olarak x-kpsdk-cd ve x-kpsdk-dv başlıklarında sunucuya gönderilir.
VM'in Topladığı Sinyaller
| Sinyal Kategorisi | Örnek Veriler | Tespit Amacı |
|---|---|---|
| Canvas fingerprint | 2D çizim piksel hash'i | Benzersiz GPU/render farkı |
| WebGL | Vendor, renderer string | Headless tarayıcı tespiti |
| AudioContext | Audio fingerprint hash | VM/sandbox tespiti |
| navigator | userAgent, platform, languages, hardwareConcurrency | Tutarlılık kontrolü |
| Timing | performance.now() deltas | Anti-debugging ve automation tespiti |
| Screen | colorDepth, pixelRatio, availWidth/Height | Spoofing tespiti |
| Behavioral | Mouse hareketi, scroll pattern, key timing | Bot davranış analizi |
Davranışsal Analiz ve Canvas Parmak İzi
Kasada VM'i yalnızca statik fingerprint toplamaz; davranışsal sinyalleri de izler. Sayfa yüklendikten sonra fare hareketlerinin olmaması, scroll olaylarının eksikliği veya tuş basış zamanlamasının mükemmele yakın düzenliliği, bot sinyali olarak değerlendirilir. Gerçek kullanıcılar düzensiz mouse hareketleri yapar; bir automation script'i ise genellikle hiç mouse event'i üretmez veya matematiksel olarak mükemmel yörüngeler kullanır.
Canvas fingerprinting konusunda, VM bir canvas elementine metin ve şekiller çizer, ardından toDataURL() çıktısının hash'ini alır. Bu hash, GPU, sürücü ve işletim sistemi kombinasyonuna göre değişir. Headless tarayıcılarda (örneğin headless: true modunda Chromium), canvas çıktısı gerçek tarayıcıdan farklıdır çünkü donanım hızlandırma devre dışı kalabilir. Kasada bu farkı tespit edebilir.
KP_UIDz Çerezi ve x-kpsdk Başlık Ailesi
Kasada, başarılı bir zorluk çözümünden sonra KP_UIDz adlı bir çerez atar. Bu çerez, kullanıcının sonraki isteklerde zorluğu yeniden çözmesini engelleyen bir proof-of-work token'ıdır. KP_UIDz değerinin geçerlilik süresi siteye göre değişir; tipik olarak 30 dakika ila 24 saat arasındadır. Çerez, IP adresi ile ilişkilendirilir; IP değişirse çerez geçersiz hale gelir.
İstek başlıklarında ise üç kritik başlık bulunur:
x-kpsdk-ct— Challenge Token: VM tarafından üretilen ana proof-of-work token'ıdır. Sunucu bu token'ı doğrular; geçersizse429yanıtı döner. Bir kasada bypass girişiminde bu token'ın geçerli olması şarttır.x-kpsdk-cd— Challenge Data: Fingerprint verilerini içeren şifrelenmiş payload'dur. Her istekte rotasyon eder; aynı payload iki kez kullanılamaz.x-kpsdk-dv— Device Vector: Cihaz ve tarayıcı özelliklerinin özetidir. Bu değer,x-kpsdk-cdile çapraz doğrulanır; tutarsızlık tespit edilirse token reddedilir.
Pratik ipucu: Bir429yanıtı aldığınızda vex-kpsdk-ctbaşlığı mevcutsa, bu token'ın geçersiz olduğu anlamına gelir. Sebebi genellikle: (1) VM'in tam çalışmaması, (2) fingerprint tutarsızlığı, (3) IP itibarının düşük olması veya (4) token'ın süresinin dolmuş olmasıdır (yaklaşık 5 dakika).
TLS (JA3/JA4) ve HTTP/2 Parmak İzi
Kasada, JavaScript zorluğuna ulaşmadan önce bile, bağlantı katmanında tespit yapar. Bu, iki temel teknoloji üzerinden çalışır:
JA3 ve JA4 Parmak İzi
TLS 1.3 handshake sırasında, istemci sunucuya bir ClientHello mesajı gönderir. Bu mesajın içinde cipher suite listesi, extension'lar ve elliptic curve bilgileri bulunur. JA3 algoritması, bu verileri belirli bir sırayla hash'leyerek bir parmak izi üretir. JA4 ise benzer şekilde çalışır ama daha yapılandırılmış bir format kullanır ve TLS sürümünü ayrı bir alanda tutar.
Kasada, bilinen tarayıcı parmak izlerini bir veritabanında tutar. Örneğin:
- Chrome 120+ (Windows): Cipher suite sıralaması
TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256şeklindedir. Extension sıralaması ve ALPN değerleri de bu parmak izinin parçasıdır. - Python requests: Python'ın
sslmodülü farklı cipher sıralaması kullandığı için farklı JA3 üretir — bu anında tespit edilir.requestskütüphanesi TLS 1.2'yi önceliklendirir ve extension listesi tarayıcıdan farklıdır. - curl: libcurl'ün TLS yapılandırması da tarayıcıdan farklıdır. Cipher sıralaması,
signature_algorithmsextension'ı vesupported_versionslistesi Chrome ile uyuşmaz.
Eğer JA3 parmak izi bilinen bir tarayıcıya uymuyorsa, Kasada IP'yi henüz JS aşamasına geçirmeden işaretleyebilir. Bu noktada residential proxy kullanımı bile yardımcı olmaz; TLS parmak izini düzeltmek zorunludur.
HTTP/2 Çerçeve Parmak İzi
HTTP/2 protokolünde, istemci bağlantı kurulduğunda bir SETTINGS çerçevesi gönderir. Bu çerçevenin alanları (HEADER_TABLE_SIZE, MAX_CONCURRENT_STREAMS, INITIAL_WINDOW_SIZE, MAX_FRAME_SIZE) ve sıralaması, her HTTP/2 istemcisi için farklıdır. Kasada, bu çerçeve sıralamasını bir parmak izi olarak kullanır.
Örneğin, Chrome'un HTTP/2 SETTINGS çerçevesi sırası [1, 2, 4, 3] şeklindeyken ve INITIAL_WINDOW_SIZE değerini 12517377 olarak ayarlarken, Python httpx kütüphanesi farklı bir sıralama ve farklı değerler kullanır. Bu fark, Kasada için güçlü bir sinyaldir ve TLS parmak izi geçse bile HTTP/2 seviyesinde tespit sağlar.
IP İtibar Skorlaması
Kasada, TLS ve HTTP/2 parmak izlerini geçseniz bile, IP adresini bir trust skoruyla değerlendirir. Bu skor, ASN türü, IP'nin önceki kötüye kullanım geçmişi ve coğrafi tutarlılık gibi faktörlerden hesaplanır. Bir IP'nin trust skoru düşükse, Kasada daha agresif zorluklar sunar veya doğrudan reddeder.
Neden Residential Proxy'ler Zorunludur
Kasada'nın IP itibar sistemi, bot tespitinin en ağırlıklı bileşenlerinden biridir. Platform, gelen IP adreslerini ASN (Autonomous System Number) bazlı sınıflandırır:
| IP Türü | Örnek ASN'ler | Kasada Davranışı | Trust Skoru |
|---|---|---|---|
| Datacenter | AS14061 (DigitalOcean), AS16509 (AWS), AS14618 (Lambda Labs) | Ön blok / yüksek risk | Çok düşük |
| Residential | AS7922 (Comcast), AS3320 (Deutsche Telekom) | Normal akış, JS zorluğu | Orta-yüksek |
| Mobile | AS30036 (T-Mobile), AS12392 (Vodafone) | En esnek, düşük zorluk | Yüksek |
Bilinen datacenter ASN'lerinden gelen istekler, Kasada tarafından doğrudan 403 veya zorluğa girmeden 429 ile reddedilebilir. Bu, ips.js VM'inin bile çalışma fırsatı bulamadığı anlamına gelir. ProxyHat lokasyon sayfasında görebileceğiniz gibi, residential proxy'ler gerçek ISP ASN'lerinden IP sağlar ve bu nedenle Kasada'nın IP itibar kontrolünden temiz geçer.
ProxyHat fiyatlandırması, residential proxy paketlerini datacenter paketlerinden ayrı tutar; bu kasada gibi IP-itibar-duyarlı sistemler için kritik bir ayrımdır. Datacenter proxy ile %5'ten daha düşük başarı oranı elde edilirken, residential proxy ile bu oran %85'in üzerine çıkabilir — tabii diğer katmanlar da tutarlıysa.
ProxyHat ile Yasal Otomasyon Kurulumu
Kasada'nın tüm katmanlarından temiz geçmek için, her katmanda tutarlı bir tarayıcı profili sunmanız gerekir. İşte yetkili test ve halka açık veri izleme için çalışan bir yaklaşım:
1. Adım: Residential Proxy ile Bağlantı
ProxyHat SOCKS5 proxy'sini kullanarak gerçek bir residential IP üzerinden bağlanın. SOCKS5, TLS trafiğini proxy seviyesinde değiştirmeden ilettiği için JA3/JA4 parmak izini korur:
# SOCKS5 ile residential proxy (SOCKS5 port 1080)
curl -x socks5://user-country-US:pass@gate.proxyhat.com:1080 \
https://hedef-site.com/sayfa
Python ile:
import requests
proxies = {
"http": "socks5://user-country-US:pass@gate.proxyhat.com:1080",
"https": "socks5://user-country-US:pass@gate.proxyhat.com:1080"
}
response = requests.get("https://hedef-site.com/sayfa", proxies=proxies)
print(response.status_code)
2. Adım: Gerçek Tarayıcı Runtime Kullanımı
Kasada'nın ips.js VM'i, gerçek bir tarayıcı DOM'u gerektirir. requests veya httpx gibi HTTP istemcileri JS çalıştıramaz. Playwright veya Puppeteer gibi browser automation araçları kullanın:
// Node.js + Playwright örneği
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
headless: false, // headless moddan kaçının
proxy: {
server: 'socks5://gate.proxyhat.com:1080',
username: 'user-country-US',
password: 'pass'
}
});
const page = await browser.newPage();
// Gerçek kullanıcı davranışı: sayfa yükle, bekle
await page.goto('https://hedef-site.com/sayfa', {
waitUntil: 'networkidle'
});
// KP_UIDz çerezinin atandığını kontrol et
const cookies = await page.context().cookies();
const kpUidz = cookies.find(c => c.name === 'KP_UIDz');
console.log('KP_UIDz mevcut:', !!kpUidz);
await browser.close();
})();
3. Adım: Sticky Session ile KP_UIDz Koruma
Kasada, KP_UIDz çerezini belirli bir IP ile ilişkilendirir. Eğer her istekte IP değişirse, çerez geçersiz hale gelir ve Kasada yeniden zorluk sunar. ProxyHat'ın sticky session özelliğini kullanın:
# Sticky session — aynı IP'de kal (session flag)
curl -x socks5://user-session-test123:pass@gate.proxyhat.com:1080 \
https://hedef-site.com/sayfa
Bu şekilde, user-session-test123 flag'i ile aynı residential IP'de kalır ve KP_UIDz geçerliliğini korur. ProxyHat dokümantasyonunda session yönetimi ve geo-targeting hakkında daha fazla bilgi bulabilirsiniz.
4. Adım: Rate Limiting ve Davranışsal Doğallık
Kasada davranışsal analiz yapar. İsteklerinizin gerçek bir kullanıcıya benzemesi için:
- İstekler arasına 2-5 saniye rastgele gecikme koyun.
- Tek IP'den saniyede 10'dan fazla istek göndermeyin.
- Mouse movement ve scroll event'leri ekleyin (Playwright'ın
page.mouse.move()API'sini kullanın). - Tutarsız
Refererbaşlıklarından kaçının; her istekte referer zinciri doğal olmalı.
Yaygın Hatalar ve Edge Case'ler
Hata 1: Sadece Header Spoofing
Bazı ekipler, x-kpsdk-ct ve x-kpsdk-cd başlıklarını bir önceki başarılı yanıttan kopyalayıp yeniden kullanmayı dener. Bu çalışmaz çünkü Kasada'nın token'ları zaman tabanlı seed içerir ve yaklaşık 5 dakika içinde geçersiz hale gelir. Ayrıca x-kpsdk-cd payload'u her istekte rotasyon eder; aynı payload iki kez gönderilmesi anormal bir sinyaldir.
Hata 2: Datacenter Proxy ile Zorluk Çözme
VM'i gerçek bir tarayıcıda çalıştırıp geçerli bir KP_UIDz alsanız bile, IP datacenter ASN'sinden geliyorsa Kasada bunu reddeder. IP itibar kontrolü, JS zorluğundan önce veya sonra bağımsız olarak çalışır. Önce IP'yi düzeltin, sonra JS katmanıyla ilgilenin.
Hata 3: Tutarsız TLS Parmak İzi
Playwright'ın Chromium'u ile gerçek Chrome arasında TLS parmak izi farkları olabilir (özellikle headless: true modunda). Bu farklar JA3/JA4 seviyesinde tespit edilir. headless: false modunu kullanın veya headless: 'new' (Chrome'un yeni headless modu) ile TLS parmak izinin gerçek Chrome ile uyuştuğunu doğrulayın.
Hata 4: HTTP/2 Çerçeve Tutarsızlığı
Bazı proxy'ler veya HTTP istemcileri, HTTP/2 SETTINGS çerçevesini değiştirir. SOCKS5 proxy'ler bu sorunu yaratmaz çünkü TLS trafiğini olduğu gibi iletir. Ancak HTTP proxy'ler CONNECT tüneli kullansa bile, bazı ara katmanlar HTTP/2 çerçevelerine müdahale edebilir. SOCKS5 tercih edin.
Hata 5: Geo-Tutarsızlık
IP'nin coğrafi konumu ile tarayıcının navigator.language ve Accept-Language başlığı uyuşmuyorsa, Kasada bunu bir tutarsızlık sinyali olarak değerlendirir. Örneğin, ABD IP'si kullanıyorsanız Accept-Language: en-US,en;q=0.9 gönderin; Almanya IP'si kullanıyorsanız de-DE,de;q=0.9,en;q=0.7 kullanın.
Yasal Uyum ve Etik Kullanım
Bu makaledeki teknik bilgiler, yetkili penetrasyon testi, güvenlik araştırması ve halka açık verilerin izlenmesi için sağlanmıştır. Kasada'nın koruduğu bir hedefe erişmeden önce:
- Hedef sitenin robots.txt dosyasını kontrol edin ve saygı gösterin.
- Sitenin Hizmet Şartları'nı (Terms of Service) okuyun; bazı siteler otomatik erişimi açıkça yasaklar.
- ABD'de CFAA (Computer Fraud and Abuse Act) kapsamında, yetkisiz erişim federal suç sayılabilir ve cezaları ciddi olabilir.
- AB'de GDPR kapsamında, kişisel veri topluyorsanız açık rıza gerekebilir; anonim/pseudonim veri topladığınızdan emin olun.
- Yalnızca erişim yetkiniz olan sistemleri veya gerçekten halka açık verileri test edin.
Web scraping kullanım senaryoları ve SERP izleme sayfalarımızda yasal ve etik otomasyon pratikleri hakkında daha fazla bilgi bulabilirsiniz.
Önemli Çıkarımlar
- Kasada çok katmanlıdır: TLS parmak izi (JA3/JA4), HTTP/2 çerçeve sıralaması, IP/ASN itibarı ve JavaScript VM zorluğu birlikte çalışır. Tek bir katmanı aşmak yeterli değildir; tüm katmanlar tutarlı olmalıdır.
- ips.js bir bytecode VM'dir: ~449 KB boyutunda, encode edilmiş string tablolu, zaman-seed'li ve integrity-checksum'lı bir VM. Patch'lemek yerine gerçek tarayıcıda çalıştırın.
- x-kpsdk-ct = token durumu: 429 + x-kpsdk-ct görüyorsanız, token geçersiz. Kök neden: VM tam çalışmıyor, fingerprint tutarsız veya IP itibarı düşük.
- Residential proxy zorunludur: Kasada datacenter ASN'lerini ön bloklar. ProxyHat residential exit'leri (
gate.proxyhat.com:1080SOCKS5) gerçek ISP IP'leri sağlar. - Sticky session kullanın: KP_UIDz çerezi IP'ye bağlıdır.
user-session-xxxflag'i ile aynı IP'de kalın. - Davranışsal doğallık: Rate limiting uygulayın, mouse/scroll event'leri ekleyin, geo-tutarlılığı koruyun.
- Etik sınırlar: Yalnızca yetkili test ve halka açık veri için kullanın. CFAA ve GDPR ihlalleri ciddi sonuçlar doğurur.






