reCAPTCHA v3 Puanlama Nasıl Çalışır: Temel Mekanizma
reCAPTCHA v3, Google'ın 2018'de tanıttığı ve 2026 itibarıyla hâlâ en yaygın kullanılan görünmez bot-detectioN sistemidir. Klasik v2'nin aksine kullanıcıya hiçbir bulmaca göstermez; bunun yerine her sayfa yüklemesinde ve her grecaptcha.execute() çağrısında 0.0 ile 1.0 arasında bir risk puanı döndürür. Bu puan, kullanıcının insan olma olasılığını temsil eder — 1.0 kesin insan, 0.0 kesin bot anlamına gelir. reCAPTCHA v3 puanı tek başına bir karar değildir; site yöneticisi bu puanı eylem (action) adıyla birlikte sunucu tarafında değerlendirir ve kendi eşiklerini belirler.
Google, puanları kabaca on bir kovaya (bucket) ayırır: 0.0–0.1, 0.1–0.2, … 0.9–1.0. Çoğu site üç temel eşik kullanır:
- 0.3 altında: Engelle (block) — genellikle login, checkout, form submit reddedilir.
- 0.3–0.6 arası: Challenge veya ek doğrulama — SMS, e-posta, veya v2 fallback gösterilir.
- 0.6 üstü: İzin ver (allow) — işlem normal akışta tamamlanır.
Bu eşikler siteye özeldir. Google'ın kendi dokümantasyonu, puanın eylem bazlı ve siteye özel olduğunu açıkça belirtir. Bazı finansal hizmetler 0.7'nin altını bile challenge'a alır; içerik siteleri 0.2'ye kadar tolere edebilir.
Teknik Bağlam: Neden Bu Problem Var?
Web otomasyonu son on yılda patladı: fiyat izleme, SERP takibi, erişilebilirlik testi, QA regresyon süreçleri, AI eğitim verisi toplama. Hepsi programatik tarayıcı kullanır. Ama aynı araçlar — Selenium, Playwright, Puppeteer — kötü niyetli aktörler tarafından da kullanılır: credential stuffing, sahte hesap açma, scraping-as-a-service, ticket botting. Google'ın işi, bu iki grubu birbirinden ayırmak. reCAPTCHA v3 nasıl çalışır sorusunun cevabı, tam da bu ayrımın nasıl yapıldığıdır.
Sistem, görünmez olduğu için kullanıcı deneyimini bozmaz. Ama bu, puanın arkasındaki sinyallerin ne kadar derin olduğunu gizler. Google, puanı tek bir sinyalden değil, onlarca sinyalin birleşiminden üretir. Ve bu sinyallerden biri — IP itibarı — doğru proxy kullanmadan aşılması en zor olanıdır.
Puanlama Modeli: grecaptcha.execute() ve Sunucu Doğrulaması
İstemci Tarafı: execute() Çağrısı
Site yüklenirken grecaptcha.ready() callback'i tetiklenir. Bundan sonra her an grecaptcha.execute(siteKey, {action: 'login'}) çağrılabilir. Bu çağrı, Google sunucularına bir istek gönderir ve bir token döndürür. Token, yaklaşık 120 saniye geçerlidir ve tek kullanımlıktır.
// İstemci tarafı örnek
grecaptcha.ready(() => {
grecaptcha.execute('SITE_KEY', {action: 'login'}).then(token => {
// Token'ı backend'e gönder
fetch('/verify', { method: 'POST', body: JSON.stringify({ token, action: 'login' }) });
});
});
Sunucu Tarafı: siteverify
Backend, token'ı Google'ın siteverify endpoint'ine POST'lar. Yanıt şu alanları içerir:
success: true/falsescore: 0.0–1.0action: execute() çağrısında belirtilen eylemhostname: Token'ın üretildiği domainchallenge_ts: Timestamperror-codes: Hata listesi (varsa)
Kritik güvenlik kontrolü: action ve hostname değerleri beklenen değerlerle eşleşmeli. Bir saldırgan, farklı bir siteden geçerli bir token alıp hedef siteye göndermeye çalışabilir (token replay). Google, resmi dokümantasyonunda action ve hostname doğrulamasını zorunlu kılar. Eşleşme yoksa, yüksek puanlı bir token bile reddedilir.
POST https://www.google.com/recaptcha/api/siteverify
Content-Type: application/x-www-form-urlencoded
secret=SECRET_KEY&token=TOKEN
Google'ın Birleştirdiği Sinyaller
reCAPTCHA v3, puanı tek bir veri kaynağından üretmez. Aşağıdaki sinyalleri ağırlıklı bir modelde birleştirir:
1. Davranışsal Telemetri
Mouse hareketleri, scroll hızı, tıklama aralıkları, klavye timing'i. İnsanlar düzgün çizgilerde hareket etmez; mikro-titreşimler, hız değişimleri, duraksamalar vardır. Botlar genellikle doğrusal ve deterministik hareket eder. navigator.webdriver flag'i, Notification.permission durumu, navigator.plugins.length gibi browser API sinyalleri de toplanır.
2. Google Çerez Grafiği
Kullanıcı Google'a giriş yapmışsa veya Google servislerini (Search, YouTube, Maps) kullanmışsa, tarayıcısında NID, SID, __Secure-1PSID gibi çerezler bulunur. Bu çerezler, kullanıcının geçmiş davranışını Google'a bağlar. Yeni bir tarayıcı profili (hiç Google çerezi yok) genellikle düşük puan alır — çünkü "yeni kimlik" şüphelidir.
3. Tarayıcı Parmak İzi (Browser Fingerprint)
Canvas fingerprint, WebGL renderer, font listesi, ekran çözünürlüğü, timezone, language, User-Agent, Accept-Language header'ları. Headless Chrome'un canvas fingerprint'i gerçek Chrome'dan farklıdır; WebGL renderer "SwiftShader" döndürür. JA3/JA4 TLS parmak izi de önemli bir sinyaldir — Playwright'ın başlattığı Chromium, belirli TLS cipher order'ları kullanır ve bu, gerçek tarayıcıdan farklı bir JA3 hash'i üretir.
4. IP İtibarı
En kritik ve en az aşılabilen sinyal. Google, IP'yi ASN seviyesinde sınıflandırır:
- Datacenter IP'leri (AWS, GCP, Azure, DigitalOcean, OVH ASN'leri): Otomatik düşük puan. Bu IP'ler zaten bot trafiği için bilinir.
- VPN/Proxy IP'leri: Çoğu ticari VPN sağlayıcısının IP'leri flag'lidir. MaxMind ve Google'ın kendi IP intelligence veritabanları bu IP'leri işaretler.
- Residential IP'ler: ISP'ye kayıtlı, ev interneti. En yüksek puan potansiyeli.
- Mobile IP'ler: Operatör IP'leri (4G/5G). Genellikle yüksek puan, ama NAT arkasında binlerce cihaz paylaşır.
Buradaki sorun nettir: datacenter IP'leri davranış ne olursa olsun puanı düşürür. Mükemmel insan davranışı simüle etseniz bile, ASN datacenter ise recaptcha v3 score 0.3 altına düşebilir. Bu nedenle residential proxy kullanımı, meşru otomasyon için bir zorunluluktur.
Neden Datacenter ve Flag'li IP'ler Puanı Çökertir
Google'ın IP sınıflandırması, ASN veritabanlarına ve geçmiş trafik desenlerine dayanır. AWS us-east-1 bloklarından gelen reCAPTCHA isteklerinin %80'inden fazlası bot trafiğidir — bu istatistiksel bir gerçektir. Google, bu IP'leri otomatik olarak düşük puan havuzuna atar.
Bu, davranışsal sinyallerin ne kadar iyi olduğunu etkilemez. Model, IP'yi bir prior olarak kullanır: "Bu IP'den gelen trafik historically %80 bot, bu yüzden puanı 0.2'den başlat ve davranış sinyalleriyle yukarı/aşağı ayarla." Datacenter IP'de davranış sinyalleri mükemmel olsa bile, prior o kadar düşüktür ki 0.3 eşiğini geçmek son derece zordur.
VPN sağlayıcıları da aynı kaderi paylaşır. NordVPN, ExpressVPN gibi popüler VPN'lerin IP'leri, Google tarafından flag'lenmiştir. Bir VPN IP'si üzerinden gelen trafik de düşük puan alır. reCAPTCHA v3 bypass denilen şey, aslında IP itibar bileşenini aşmak için residential IP kullanmaktır — ki bu değişen IP havuzu ve gerçek ISP kaydı sayesinde çalışır.
Token Doğrulaması: Action ve Hostname Eşleşmesi
Sunucu tarafında siteverify çağrısından dönen yanıtta action ve hostname alanları vardır. Bunları doğrulamak, güvenlik için kritik:
import requests
def verify_recaptcha(token, expected_action, expected_hostname):
resp = requests.post('https://www.google.com/recaptcha/api/siteverify', data={
'secret': 'YOUR_SECRET',
'response': token
}).json()
if not resp['success']:
return False, 'Token geçersiz'
if resp['action'] != expected_action:
return False, 'Action mismatch'
if resp['hostname'] != expected_hostname:
return False, 'Hostname mismatch'
if resp['score'] < 0.5:
return False, f'Low score: {resp["score"]}'
return True, f'Score: {resp["score"]}'
Bu kontrolleri atlayan siteler, token replay saldırılarına açıktır. Bir saldırgan, kendi sitesinde geçerli yüksek puanlı bir token üretip hedef siteye gönderebilir. Action ve hostname kontrolü bunu engeller.
Pratik Yaklaşım: ProxyHat Residential Proxy'ler ile Meşru Otomasyon
Aşağıdaki senaryo, meşru kullanım örnekleridir: QA regresyon testi, erişilebilirlik denetimi, yetkili güvenlik testi. Hesap sahtekârlığı, credential stuffing, veya sahte hesap açma için kullanmayın. Bu, hem CFAA (Computer Fraud and Abuse Act) hem de GDPR kapsamında yasa dışıdır.
Adım 1: ProxyHat Residential Proxy Yapılandırması
ProxyHat residential proxy'leri, gerçek ISP IP'leri kullanır. Gateway adresi gate.proxyhat.com, HTTP port 8080'dir. Geo-targeting username içine gömülür:
# US residential proxy
http://user-country-US:pass@gate.proxyhat.com:8080
# Almanya, Berlin residential proxy
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080
# Sticky session (aynı IP'yi koru)
http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080
Sticky session, reCAPTCHA için kritik: Aynı sayfa içinde birden fazla execute() çağrısı yapılırsa ve her çağrı farklı IP'den gelirse, bu tutarsızlık düşük puana neden olur. Tek bir oturum boyunca aynı IP'yi korumak gerekir. Detaylı yapılandırma için ProxyHat dokümantasyonuna bakabilirsiniz.
Adım 2: Gerçek Tarayıcı ile İnsan Benzeri Etkileşim
Headless tarayıcı kullanmayın. Playwright'ı headed modda çalıştırın, navigator.webdriver'ı gizleyin, gerçek mouse hareketleri ekleyin. İşte çalışan bir Python örneği:
from playwright.sync_api import sync_playwright
import time, random
PROXY = 'http://user-country-US:pass@gate.proxyhat.com:8080'
with sync_playwright() as p:
browser = p.chromium.launch(
headless=False,
proxy={'server': 'http://gate.proxyhat.com:8080',
'username': 'user-country-US',
'password': 'pass'}
)
context = browser.new_context(
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...',
viewport={'width': 1920, 'height': 1080},
locale='en-US'
)
page = context.new_page()
# İnsan benzeri davranış: rastgele bekleme, scroll
page.goto('https://example.com/login', wait_until='networkidle')
time.sleep(random.uniform(1.5, 3.0))
# Mouse hareketi
page.mouse.move(random.randint(200, 800), random.randint(200, 600))
time.sleep(random.uniform(0.3, 0.8))
# Form doldur
page.fill('#username', 'testuser')
time.sleep(random.uniform(0.2, 0.5))
page.fill('#password', 'testpass')
time.sleep(random.uniform(0.2, 0.5))
# reCAPTCHA token'ı bekle
token = page.evaluate('''() => {
return new Promise(resolve => {
grecaptcha.execute('SITE_KEY', {action: 'login'})
.then(t => resolve(t));
});
}''')
print(f'Token: {token[:50]}...')
browser.close()
Adım 3: Token'ı Sunucuda Doğrula
Token'ı backend'e gönderip siteverify çağrısı yapın. Action ve hostname'i doğrulamayı unutmayın:
import requests
token = '...' # İstemciden gelen token
resp = requests.post('https://www.google.com/recaptcha/api/siteverify',
data={'secret': 'YOUR_SECRET', 'response': token}).json()
print(f"Score: {resp['score']}")
print(f"Action: {resp['action']}")
print(f"Hostname: {resp['hostname']}")
if resp['success'] and resp['action'] == 'login' and resp['score'] > 0.5:
print('✓ Doğrulama başarılı')
else:
print('✗ Doğrulama başarısız')
Yaygın Hatalar ve Edge Case'ler
Hata 1: Headless Chrome Kullanmak
Headless Chromium, navigator.webdriver=true döndürür ve canvas fingerprint'i gerçek tarayıcıdan farklıdır. Bu, puanı anında düşürür. Çözüm: headed mod + --disable-blink-features=AutomationControlled flag'i, veya stealth plugin'leri kullanmak.
Hata 2: IP Rotasyonu Yapmak
Her istekte farklı IP kullanmak, normal kullanıcı davranışına aykırı. Tek oturum boyunca aynı IP'yi koruyun. ProxyHat'ta user-session-abc123 parametresi sticky session sağlar.
Hata 3: Google Çerezi Olmadan Gelmek
Hiç Google çerezi olmayan bir tarayıcı profili, "yeni kimlik" olarak işaretlenir. Test öncesi tarayıcıyı birkaç dakika Google servislerinde gezdirerek çerez oluşturun.
Hata 4: Action Eşleşmesini Atlamak
Sunucuda resp['action'] kontrolünü yapmamak, token replay saldırısına açık hale getirir. Her zaman action ve hostname doğrulayın.
Hata 5: TLS Parmak İzini Göz Ardı Etmek
Playwright/Puppeteer'ın başlattığı Chromium, belirli TLS cipher order'ları kullanır. Bu, gerçek Chrome'dan farklı bir JA3/JA4 hash'i üretir. İleri düzey anti-bot sistemleri bunu sinyal olarak kullanır. Çözüm: gerçek Chromium binary kullanmak veya TLS parmak izini gerçek Chrome ile eşleştiren kütüphaneler kullanmak.
ProxyHat Kurulumu ve İç Bağlantılar
ProxyHat residential proxy'leri, reCAPTCHA v3 puanını yükseltmek için IP itibar bileşenini çözer. İşte kurulum özeti:
- ProxyHat fiyatlandırma sayfasından residential proxy paketi seçin.
- Dashboard'da kullanıcı adı ve şifrenizi alın.
- Geo-targeting parametrelerini username'e gömün:
user-country-US. - Sticky session için
user-session-abc123kullanın. - Tüm trafiği
gate.proxyhat.com:8080üzerinden yönlendirin.
Web scraping kullanım senaryosu için web scraping use case sayfamıza, SERP takibi için SERP tracking sayfamıza, mevcut lokasyonlar için locations sayfamıza bakın.
Hangi Proxy Tipi En İyi?
| Proxy Tipi | IP İtibarı | reCAPTCHA v3 Puanı | Kullanım |
|---|---|---|---|
| Datacenter | Düşük | Genelde <0.3 | Önerilmez |
| Ticari VPN | Düşük-Orta | 0.2–0.4 | Riskli |
| Residential (ProxyHat) | Yüksek | 0.5–0.9 | Önerilen |
| Mobile (4G/5G) | Yüksek | 0.6–0.9 | En yüksek ama pahalı |
Meşru Kullanım Sınırları
Bu rehber, aşağıdaki meşru senaryolar içindir:
- QA regresyon testi: Kendi sitenizde form akışlarını otomatik test etmek.
- Erişilebilirlik denetimi: WCAG uyumluluğu için otomatik tarama.
- Yetkili güvenlik testi: Yazılı izin ile penetrasyon testi.
- Araştırma: Anti-bot sistemleri akademik olarak incelemek.
İzin verilmeyen kullanım: Credential stuffing, sahte hesap açma, ticket botting, credential stuffing, sahte yorum yazma, ödeme sahtekârlığı. Bu kullanımlar ABD'de CFAA, AB'de GDPR ve yerel siber suç yasaları kapsamında yasa dışıdır. ProxyHat, bu tür kullanımları kabul etmez ve hesap kapatmaya yol açar.
Önemli: reCAPTCHA v3'ü aşmak için residential proxy kullanmak, tek başına yeterli değildir. IP itibar sadece bir bileşendir. Davranışsal sinyaller, tarayıcı parmak izi ve Google çerez grafiği de puanı etkiler. Tam çözüm: residential proxy + gerçek tarayıcı + insan benzeri davranış + uygun oturum tutarlılığı.
Key Takeaways
- reCAPTCHA v3, 0.0–1.0 arası risk puanı döndürür; çoğu site 0.3 altını engeller, 0.6 üstüne izin verir.
- Puan; davranışsal telemetri, Google çerez grafiği, tarayıcı parmak izi ve IP itibarının birleşimidir.
- Datacenter ve VPN IP'leri, davranış ne olursa olsun puanı düşürür — residential proxy zorunludur.
- Sunucu tarafında action ve hostname doğrulaması, token replay saldırılarını engeller.
- Sticky session (ProxyHat
user-session-xxx) aynı oturumda IP tutarlılığı sağlar. - Meşru kullanım: QA, erişilebilirlik, yetkili güvenlik testi. Hesap sahtekârlığı yasa dışıdır.






