Explainers

reCAPTCHA Puan Faktörleri: Tam Teknik Analiz

Puanınız 0,3'te takılı kaldıysa sorumlu tek bir ayar değildir: reCAPTCHA'nın Gelişmiş Risk Analizi (ARA) motoru, sayfa açıldığı anda onlarca sinyal toplar ve bunları 0,0 (kesin bot) ile 1,0 (kesin insan) arasında tek bir sayıya indirir. Otomasyonda puanı en çok düşüren üç kalem sırasıyla şudur: hiç fare hareketi olmaması, veri merkezi IP'si ve headless tarayıcının ele verdiği eksik JavaScript API'leri. Aşağıda her sinyal grubunun puana ne kadar dokunduğunu ve hangi sırayla ilgilenmeye değdiğini bulacaksınız.

Google puanlama formülünü yayınlamıyor. Buradaki değerler kamuya açık testlere ve gözlem raporlarına dayanır; ortama, siteye ve zamana göre değişebilir.


Puanı belirleyen beş sinyal grubu

reCAPTCHA sinyalleri beş grupta toplar; nihai puan bu grupların ağırlıklı bileşkesidir:

Final Score = f(Browser Signals, Behavioral Signals, Network Signals, 
                History Signals, Environmental Signals)

Ağırlık sırası pratikte şöyle işler: davranış > tarayıcı > ağ > geçmiş > ortam. Düzeltme sırası ise tersinedir — en ucuz kazançlar tarayıcı ve ağ tarafındadır.


Tarayıcı sinyalleri: otomasyonun en görünür tarafı

Bu grup tek bir soruya cevap arar: istemci gerçek bir tarayıcı mı, yoksa otomasyon aracı mı?

Eksik JavaScript API'leri neyi ele veriyor

reCAPTCHA, headless tarayıcıların ya hiç sunmadığı ya da farklı doldurduğu API'leri sorgular:

Kontrol edilen API Gerçek tarayıcıda beklenen headless göstergesi
navigator.userAgent Sürüm ve platform bilgisi tutarlı Otomasyon aracının varsayılan değeri (Selenium, Puppeteer)
navigator.plugins En az 1 öğeli PluginArray Boş veya yok
navigator.languages Yerel ayar dizeleri içeren dizi Boş dizi veya yok
navigator.hardwareConcurrency 2-16 (CPU ile uyumlu) Bazen 0 veya tanımsız
navigator.deviceMemory 2-16 GB Bazı headless yapılarda yok
window.chrome runtime vb. içeren nesne headless Chrome'da yok
Notification.permission default, granted veya denied Hata fırlatır veya yok

Puana etkisi: Bu değerlerin eksik ya da birbiriyle çelişkili olması puanı 0,3-0,5 aralığında aşağı çeker.

Canvas çıktısı: makineye özgü imza

reCAPTCHA görünmez bir canvas öğesi çizip piksel verisini geri okur. Çıkan değer tarayıcı, işletim sistemi ve GPU üçlüsüne özgüdür.

// reCAPTCHA performs something similar to:
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = "top";
ctx.font = "14px 'Arial'";
ctx.fillText("Hello", 2, 2);
const fingerprint = canvas.toDataURL();

Sonuç üç şekilde okunur:

  • Bildirilen tarayıcı/OS ile tutarlı çıktı → nötr
  • Bilinen headless kalıplarıyla eşleşen çıktı → -0,3 ila -0,5
  • Canvas çağrıları engellenmiş veya hep aynı veriyi döndürüyor → -0,4 ila -0,6

WebGL oluşturucu dizesi

WebGL oluşturucu dizesi GPU'yu doğrudan söyler:

const gl = document.createElement('canvas').getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
// Expected: "ANGLE (NVIDIA GeForce GTX 1060...)"
// Headless: "SwiftShader" or "Google SwiftShader"

Puana etkisi: SwiftShader (headless Chrome'un yazılım tabanlı oluşturucusu) güçlü bir bot göstergesidir ve puanı 0,3-0,5 düşürür.


Davranışsal sinyaller: en ağır basan grup

Davranış sinyalleri puan hesabında en yüksek ağırlığa sahiptir ve sayfa yüklendiği saniyeden itibaren birikir. Sayfada 200 milisaniye geçirip formu gönderen bir istemci, diğer her şeyi doğru yapsa bile düşük puan alır.

Etkileşim sırası: insanlar önce okur

reCAPTCHA hangi öğeyle hangi sırada etkileşime girdiğinizi izler:

  • İnsan: sayfaya tıklar, bağlantıların üzerinde durur, içeriği okur, sonra formu doldurur
  • Bot: doğrudan form alanına gider, sırayla doldurur, gönderir

Puana etkisi: Sayfayı hiç incelemeden forma gitmek → -0,1 ila -0,3.

Kaydırma davranışı

  • İnsan: ivmeli ve kademeli kaydırma, değişken hız, okumak için duraklamalar
  • Bot: hiç kaydırma yok ya da alana anında odaklanma

Puana etkisi: Form etkileşiminden önce hiç kaydırma olayı yoksa → -0,2 ila -0,3.

Fare hareketi

Sayfa ziyareti boyunca fare koordinatları ve zaman damgaları toplanır:

Sinyal İnsan deseni Bot deseni
Hareket sayısı Ziyaret başına 50-500+ olay 0-5 olay
Yörünge Hızı değişen kavisli yollar Düz çizgi, sabit hız
İvmelenme Doğal hızlanma ve yavaşlama Anında başlama ve durma
Mikro hareketler Gezinirken küçük titremeler Eylemler arasında tam hareketsizlik
Hedefi aşma Hafif aşma ve düzeltme Piksel hassasiyetinde isabet

Puana etkisi: Hiç fare hareketi olmaması tek başına puanı 0,4-0,7 düşürebilir — listedeki en büyük tek kalem budur.

Klavye zamanlaması

Inter-key timing:
  Human: Variable (50-300ms between keys, varies by key pair)
  Bot: Constant (all keys at same interval, or instant paste)

Key events:
  Human: keydown → keypress → keyup for each character
  Bot: May skip keypress, or fire all events simultaneously

Corrections:
  Human: Occasional backspace, re-typing
  Bot: Perfect input without corrections

Puana etkisi: Metnin panodan veya JavaScript value ataması ile anında yazılması 0,1-0,2 puana mal olur.


Geçmiş sinyalleri: tarayıcı profilinin sicili

Aynı tarayıcı profiliyle geçmişte ne yaptığınız, bugünkü puanın başlangıç noktasını belirler.

Google oturum çerezleri

Tarama geçmişi olan bir Google hesabına giriş yapmış kullanıcılar avantajlıdır:

  • SID, HSID, SSID çerezleri → oturumu açık bir Google kullanıcısı
  • Hiç Google çerezi yok → tanınmayan kullanıcı, daha düşük başlangıç puanı

Puana etkisi: Aktif Google oturumu → +0,1 ila +0,3.

reCAPTCHA'nın kendi çerezleri

Başarılı bir doğrulamadan sonra reCAPTCHA kendi çerezlerini yazar:

  • _GRECAPTCHA → daha önce tamamlanmış bir çözüm
  • rc::a, rc::b, rc::c → risk analizi veri çerezleri

Puana etkisi: Bu çerezleri taşımayan sıfırdan oturum → -0,1 ila -0,2. Her istekte temiz profil açan işlerin puanı bu yüzden hep düşük başlar.

Siteler arası itibar

Google, aynı tarayıcı profilinin farklı sitelerdeki reCAPTCHA davranışını izler. A sitesindeki iyi sicil B sitesindeki puanı yukarı çeker; tersi de geçerlidir.


Ağ sinyalleri: IP ve TLS tarafı

IP itibarı

Google şu girdilerden oluşan bir IP itibar veritabanı tutar: aynı IP'den gelen önceki doğrulama sonuçları, bilinen veri merkezi aralıkları (AWS, GCP, Azure, DigitalOcean vb.), bilinen VPN aralıkları, kötüye kullanım ve spam bildirimleri, arama ve reklam sahtekarlığı sinyalleri.

IP türü Tipik puan etkisi
Bireysel ISS bağlantısı, temiz sicil Nötr ila +0,1
Bireysel ISS bağlantısı, sicilinde kötüye kullanım var -0,1 ila -0,2
Veri merkezi -0,3 ila -0,5
Bilinen VPN aralığı -0,2 ila -0,4
Tor çıkış düğümü -0,4 ila -0,6
Yakın zamanda kötüye kullanım nedeniyle işaretlenmiş -0,3 ila -0,6

TLS imzası (JA3/JA4)

TLS el sıkışması, istemcinin hangi şifre paketlerini ve uzantıları desteklediğini gösterir. Her istemcinin karakteristik bir imzası vardır:

  • Chrome: kendine özgü şifre sırası, TLS 1.3, GREASE uzantıları
  • Python requests: farklı şifre sırası, GREASE yok, daha sade uzantı listesi
  • cURL: minimum uzantı, OpenSSL'e özgü kalıplar

Puana etkisi: Tarayıcı dışı bir TLS imzası → -0,2 ila -0,4. Saf HTTP istemcisiyle çalışan bir iş akışında bu satır neredeyse sabittir; puanı buradan kurtarmaya çalışmak yerine token'ı API ile almak çoğu zaman daha ucuza gelir.

HTTP başlıkları

Başlık İnsan göstergesi Bot göstergesi
User-Agent Güncel tarayıcı sürümüyle uyumlu Eski sürüm veya otomasyon aracının UA'sı
Accept-Language Yerel tercihlerle dolu (tr-TR,tr;q=0.9) Eksik veya jenerik
Accept-Encoding gzip, deflate, br Eksik veya olağandışı
Sec-CH-UA İstemci tarayıcıyla eşleşen ipuçları Eksik (2022 öncesi başlık seti)

Ortam sinyalleri: tutarlılık kontrolü

Bu grubun ağırlığı düşüktür, ama bir çelişki yakalandığında ceza nettir.

Saat dilimi ile IP uyumu

const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
// Should match IP geolocation
// "America/New_York" with a New York IP → consistent
// "America/New_York" with a Tokyo IP → suspicious

İstanbul'daki ekiplerde en sık görülen çelişki burada çıkar: Frankfurt'taki sunucuda çalışan konteyner UTC bildirirken tarayıcı profili Europe/Istanbul der. Konteynerin TZ değerini, Accept-Language başlığını ve çıkış IP'sinin ülkesini aynı hikâyeyi anlatacak biçimde hizalayın; maliyeti sıfırdır.

Ekran, pencere ve pil değerleri

Bu grubun okuduğu diğer iki değer ekran ölçüleri ve pil durumudur:

screen.width, screen.height       // Physical screen
window.innerWidth, innerHeight    // Browser window
window.outerWidth, outerHeight    // Including browser chrome
navigator.getBattery().then(battery => {
    battery.level;    // 0.0 to 1.0
    battery.charging; // true/false
});

Puana etkisi: Olağandışı ekran değerleri (0×0, aşırı büyük ya da tam olarak varsayılan çözünürlük) → -0,1 ila -0,2. Battery API tek başına ceza getirmez; sürekli %100 şarjlı görünmek masaüstü ve sunucu ortamlarıyla zaten tutarlıdır.


Türkiye'deki ekipler için pratik notlar

Türk geliştirici pazarının ağırlığı e-ticaret ve fintech entegrasyonlarında; en sık karşılaşılan senaryo da bir ödeme adımının veya üyelik formunun otomatik regresyon testinde reCAPTCHA v3 duvarına çarpması oluyor. Üç pratik not:

  • Test ortamınızı yerelleştirin. Europe/Istanbul saat dilimi, tr-TR yerel ayarı ve +90 formatındaki sahte telefon verisi hem test verinizi gerçekçi kılar hem de ortam sinyallerini kendi içinde tutarlı tutar.
  • KVKK'yı akışın parçası sayın. Topladığınız veride kişisel veri varsa, CAPTCHA tarafını çözmüş olmanız hukuki tarafı çözmez; yetkilendirilmiş bir QA veya veri toplama akışında çalıştığınızdan emin olun.
  • Maliyeti USD üzerinden planlayın. CaptchaAI planları thread bazlıdır ve thread başına çözüm sınırı yoktur; BASIC ($15/ay, 5 thread) küçük bir regresyon paketi için sabit bir aylık kalemdir.

Puanı yükseltmek için ne yapılabilir

Yaklaşım Beklenen etki Zorluk
Gerçek Chrome kullanın (headless değil) +0,3 ila +0,5 Düşük
Otomasyon aracının varsayılan navigator.userAgent değerini düzeltin +0,2 ila +0,3 Düşük
Fare hareketi simülasyonu ekleyin +0,2 ila +0,4 Orta
Kendi sunucu altyapınızın IP'lerini kullanın +0,2 ila +0,3 Düşük (maliyet)
Google çerezlerini oturumlar arasında koruyun +0,1 ila +0,2 Orta
TLS imzasını Chrome ile hizalayın +0,1 ila +0,3 Yüksek
Formdan önce sayfa gezintisini simüle edin +0,1 ila +0,2 Orta

Alternatif: sinyal ayarı yerine API ile token alın

Bütün bu sinyalleri tek tek kovalamak yerine token'ı çözüm servisinden isteyebilirsiniz:

import requests
import time

API_KEY = "YOUR_API_KEY"

# Request a high-score token
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
    "pageurl": "https://staging.example.com/qa-login",
    "version": "v3",
    "action": "login",
    "json": 1,
})

task_id = submit.json()["request"]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        print(f"High-score token received")
        break

Akış üç adımdır:

  • Görevi in.php uç noktasına gönderin.
  • Dönen task_id ile res.php uç noktasını sorgulayın.
  • status 1 olduğunda g-recaptcha-response değerini forma yerleştirin; token'ın ömrü kısadır, gecikmeden gönderin.

Aynı iki uç nokta reCAPTCHA v2 onay kutusu, Cloudflare Turnstile ve GeeTest v3 akışlarında da aynı biçimde çalışır.


Sık sorulan sorular

Puanı yükseltmek için hangi değişiklik en hızlı sonucu verir?

headless modu bırakıp gerçek bir Chrome oturumu kullanmak. Tek başına 0,3-0,5 aralığında kazanç sağlar ve uygulaması bir saatlik iştir. İkinci sırada veri merkezi IP'sinden çıkmak gelir.

CaptchaAI'nin döndürdüğü token'ın puanını ben belirleyebilir miyim?

Hayır. API'de score-target gibi bir parametre yoktur; puanı her zaman Google hesaplar. Yapabileceğiniz şey isteğe cookies, userAgent ve proxy alanlarını eklemektir — bunlar puanın hesaplandığı bağlamı iyileştirir.

Aynı sitede sayfadan sayfaya puan neden değişiyor?

reCAPTCHA v3 puanı action parametresiyle bağlama oturtur; ana sayfanın, giriş formunun ve ödeme adımının temel puanları farklı olabilir. Ayrıca davranış sinyalleri oturum boyunca biriktiği için sonraki sayfalar genelde daha yüksek puan alır.

Veri merkezinde çalışan bir işi puan düşüşü olmadan yürütebilir miyim?

Doğrudan hayır — veri merkezi aralıkları -0,3 ila -0,5 arasında bir ceza taşır ve bunu tarayıcı tarafından telafi etmek zordur. Pratik yol, token üretimini işten ayırmaktır: iş sunucuda kalır, token'ı çözüm API'sinden alırsınız.

Puan düşünce neden reCAPTCHA v2 onay kutusu çıkıyor?

Çünkü çoğu uygulama düşük puanı bir geri dönüş akışına bağlar: eşiğin altındaki istek v2 onay kutusuna yönlendirilir. Karşınıza çıkan ızgara, düşük puanın sebebi değil belirtisidir.


Özet

reCAPTCHA puanı beş grubun bileşkesidir: davranış, tarayıcı, ağ, geçmiş ve ortam tutarlılığı. Otomasyonda ilk üç grup puanın büyük kısmını belirler; gerçek Chrome'a geçmek ve veri merkezi IP'sinden çıkmak ucuz kazançlardır, geri kalanı bakım maliyetlidir. Sürekli yüksek puan gerektiren bir iş akışında CaptchaAI ile token'ı doğrudan alabilir, isteğe cookies, userAgent ve proxy alanlarını ekleyerek Google'ın hesapladığı puanı iyileştirebilirsiniz.

İlgili Makaleler

Bu makale için yorumlar devre dışı bırakılmıştır.