Explainers

Görünmez CAPTCHA Sistemleri Açıklaması: Nasıl Çalışır?

Görünmez CAPTCHA'lar, görünür bir sorun göstermeden kullanıcıları doğrular. Tıklanacak bir onay kutusu, çözülecek bir resim ızgarası ve yazılacak bir metin yok. Doğrulama tamamen arka planda, tarayıcı davranışını, cihaz sinyallerini ve ağ itibarını analiz eden JavaScript aracılığıyla gerçekleşir. Otomasyon iş akışınız, bazı kullanıcılar için temiz bir şekilde gönderilen ancak diğerlerini engelleyen (sayfada görünür bir CAPTCHA olmayan) bir formla karşılaşırsa, görünmez bir CAPTCHA sistemiyle karşı karşıyasınız demektir.


Görünmez CAPTCHA'lar nasıl çalışır?

Tüm görünmez CAPTCHA'lar aynı temel modeli izler:

Page loads → CAPTCHA JavaScript injected
    ↓
Script runs in background, collecting signals:
  ├─ Browser test profil yapılandırması (canvas, WebGL, fonts, plugins)
  ├─ Behavioral data (mouse, keyboard, scroll, timing)
  ├─ Network data (IP reputation, TLS test profil yapılandırması)
  ├─ Device data (screen, GPU, CPU cores, memory)
  └─ History data (cookies, previous CAPTCHA completions)
    ↓
Signals sent to CAPTCHA provider's risk engine
    ↓
Risk score computed
    ↓
Response varies by score:
  ├─ Low risk  → Token issued silently (user sees nothing)
  ├─ Medium    → Light challenge shown (checkbox, simple click)
  └─ High risk → Full challenge (image grid) or block

Görünür CAPTCHA'lardan temel fark: doğrulama, yalnızca kullanıcı bir onay kutusunu tıkladığında değil, sayfa yüklendiği andan itibaren sürekli olarak çalışır.


Başlıca görünmez CAPTCHA sistemleri

1.reCAPTCHA v3

Sağlayıcı: Google Sürüm: 2018 Pazar payı: Görünmez CAPTCHA'lar arasında en yüksek

reCAPTCHA v3, her sayfa eylemi için 0,0 ile 1,0 arasında bir kayan nokta puanı döndürür. Puanla ne yapılacağına web sitesi sahibi karar verir.

Sinyalleri nasıl toplar:

<!-- reCAPTCHA v3 integration -->
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
<script>
  grecaptcha.ready(function() {
    grecaptcha.execute('SITE_KEY', { action: 'login' }).then(function(token) {
      // Token sent to server for verification
      document.getElementById('captcha-token').value = token;
    });
  });
</script>

execute() çağrısı isteğe bağlı olarak sinyal toplamayı tetikler. Perde arkasında reCAPTCHA, komut dosyası yüklendiğinden beri veri topluyor.

Puan yorumu:

Puan Anlamı Tipik eylem
0,9 Çok büyük ihtimalle insan İzin ver
0,7 Muhtemelen insan İzlemeyle izin ver
0,5 Belirsiz Ek doğrulama gerektir
0,3 Muhtemelen bot reCAPTCHA v2'yi engelle veya göster
0,1 Büyük olasılıkla bot Blok

Sayfa kaynağında algılama:

import requests
import re

def detect_recaptcha_v3(url):
    html = requests.get(url, timeout=10).text
    indicators = {
        "recaptcha_v3": False,
        "site_key": None,
        "actions": [],
    }

    # Check for v3 script
    if "recaptcha/api.js?render=" in html:
        indicators["recaptcha_v3"] = True
        match = re.search(r"render=([A-Za-z0-9_-]+)", html)
        if match:
            indicators["site_key"] = match.group(1)

    # Find action names
    actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
    indicators["actions"] = actions

    return indicators

print(detect_recaptcha_v3("https://staging.example.com/qa-login"))

2.Cloudflare Turnstile

Sağlayıcı: Cloudflare Sürüm: 2022 Pazar payı: En hızlı büyüyen

Turnstile, kullanıcı verilerinin toplanmasını gerektirmeden çok aşamalı bir doğrulama hattı kullanır.

Doğrulama aşamaları:

  1. Özel Erişim Jetonu kontrolü — Tarayıcı Apple PAT'i destekliyorsa doğrulama anında tamamlanır
  2. Etkileşimli olmayan zorluk — Tarayıcı hafif bir kriptografik iş kanıtı bulmacasını çözer
  3. Yönetilen zorluk — Cloudflare, ağından gelen risk sinyallerine göre etkileşimli olmayan ve etkileşimli arasında karar verir (internet trafiğinin %20'sinden fazlası Cloudflare üzerinden akar)
  4. İnteraktif mücadele — Yalnızca risk puanı yüksek olduğunda gösterilir; onay kutusu stilinde bir widget görüntüler

Entegrasyon:

<!-- Turnstile widget -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Algılama:

def detect_turnstile(url):
    html = requests.get(url, timeout=10).text
    indicators = {
        "turnstile": False,
        "site_key": None,
    }

    if "challenges.cloudflare.com/turnstile" in html or "cf-turnstile" in html:
        indicators["turnstile"] = True
        match = re.search(r'data-sitekey="([^"]+)"', html)
        if match:
            indicators["site_key"] = match.group(1)

    return indicators

3. reCAPTCHA v2 Görünmez

Sağlayıcı: Google Sürüm: 2017

Bu, form gönderiminde programlı olarak tetiklenen reCAPTCHA v2'dir. Hiçbir onay kutusu görünmüyor; kullanıcı gönder düğmesini tıklıyor ve reCAPTCHA arka planda çalışıyor. Risk puanı yeterince yüksekse açılır pencerede görünür bir resim sorunu görünür.

Entegrasyon:

<button class="g-recaptcha"
        data-sitekey="SITE_KEY"
        data-callback="onSubmit"
        data-size="invisible">
    Submit
</button>

v3'ten temel farkı: v2 Invisible, riskli kullanıcılar için hala gözle görülür bir zorluk teşkil etmektedir. v3 hiçbir zaman gözle görülür bir zorluk göstermez; web sitesinin puanla ne yapacağına karar vermesi gerekir.

4. hCaptcha Pasif (Kurumsal)

Sağlayıcı: Intuition Machines Kullanılabilirlik: Yalnızca kurumsal katman

hCaptcha Enterprise'ın pasif modu, kullanıcıyı herhangi bir görünür widget olmadan değerlendirir. Standart hCaptcha ile aynı davranışsal sinyalleri kullanır ancak yalnızca en şüpheli ziyaretçiler için görsel bir zorluk sunar.

5. Apple Özel Erişim Belirteçleri

Sağlayıcı: Apple Kullanılabilirlik: iOS 16+, macOS Ventura+

Bu bir CAPTCHA sağlayıcısı değil, bir CAPTCHA atlama mekanizmasıdır. Apple cihazları, donanım doğrulaması yoluyla meşru olduklarını kanıtlayarak web sitelerinin CAPTCHA'ları tamamen atlamasına olanak tanır.

Device attestation:

  1. Website requests a challenge from a token issuer
  2. Device proves it is genuine without revealing identity
  3. Token issuer generates a blind-signed token
  4. Website verifies token → CAPTCHA skipped

Cloudflare, Fastly ve diğer CDN sağlayıcıları tarafından desteklenir.


CaptchaAI ile görünmez CAPTCHA'ları çözme

Görünmez CAPTCHA'lar hâlâ formlarla birlikte gönderilmesi gereken belirteçler oluşturmaya devam ediyor. API tabanlı çözücüler bu belirteçleri harici olarak oluşturur.

reCAPTCHA v3'yi Çözme

import requests
import time

API_KEY = "YOUR_API_KEY"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9",
    "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"reCAPTCHA v3 token received (score ≥ 0.9)")
        break

Cloudflare Turnstile'yi Çözme

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
    "pageurl": "https://example.com/signup",
    "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:
        turnstile_token = result["request"]
        print(f"Turnstile token received (100% success rate)")
        break

Node.js — reCAPTCHA v3'yi Çözme

const axios = require("axios");

async function solveRecaptchaV3(siteKey, pageUrl, action) {
    const API_KEY = "YOUR_API_KEY";

    // Submit
    const { data: submit } = await axios.post(
        "https://ocr.captchaai.com/in.php",
        new URLSearchParams({
            key: API_KEY,
            method: "userrecaptcha",
            googlekey: siteKey,
            pageurl: pageUrl,
            version: "v3",
            action: action,
            json: 1,
        })
    );

    const taskId = submit.request;

    // Poll
    for (let i = 0; i < 60; i++) {
        await new Promise((r) => setTimeout(r, 5000));
        const { data: result } = await axios.get(
            "https://ocr.captchaai.com/res.php",
            {
                params: {
                    key: API_KEY,
                    action: "get",
                    id: taskId,
                    json: 1,
                },
            }
        );

        if (result.status === 1) {
            return result.request;
        }
    }

    throw new Error("Solve timeout");
}

solveRecaptchaV3("SITE_KEY", "https://staging.example.com/qa-login", "login")
    .then((token) => console.log("Token:", token.substring(0, 50) + "..."));

Görünmez CAPTCHA'ları tespit etme: kapsamlı denetleyici

import requests
import re

def detect_invisible_captcha(url):
    """Detect all invisible CAPTCHA types on a page."""
    html = requests.get(url, timeout=10).text

    results = []

    # reCAPTCHA v3
    if "recaptcha/api.js?render=" in html:
        key = re.search(r"render=([A-Za-z0-9_-]+)", html)
        results.append({
            "type": "reCAPTCHA v3",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "userrecaptcha (version=v3)",
        })

    # reCAPTCHA v2 invisible
    if 'data-size="invisible"' in html and "g-recaptcha" in html:
        key = re.search(r'data-sitekey="([^"]+)"', html)
        results.append({
            "type": "reCAPTCHA v2 Invisible",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "userrecaptcha (invisible=1)",
        })

    # Cloudflare Turnstile
    if "challenges.cloudflare.com/turnstile" in html:
        key = re.search(r'data-sitekey="([^"]+)"', html)
        results.append({
            "type": "Cloudflare Turnstile",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "turnstile",
        })

    # hCaptcha (passive mode detected by script without visible widget)
    if "hcaptcha.com/1/api.js" in html and 'data-size="invisible"' in html:
        results.append({
            "type": "hCaptcha Passive",
            "solver_method": "hcaptcha",
        })

    if not results:
        results.append({"type": "none detected"})

    return results

for item in detect_invisible_captcha("https://example.com"):
    print(item)

Görünmez CAPTCHA karşılaştırması

Özellik reCAPTCHA v3 Turnstile reCAPTCHA v2 Görünmez hCaptcha Pasif
Görünür zorluk Asla nadiren Bazen (geri dönüş) nadiren
Gizlilik Tarama verilerini toplar Kişisel veri yok Tarama verilerini toplar Etkileşim verilerini toplar
Maliyet Ücretsiz (1M/month) Ücretsiz (sınırsız) Ücretsiz (1M/month) Yalnızca kurumsal
Puan döndürüldü Evet (0,0-1,0) Hayır (pass/fail) Hayır (pass/fail) Evet (Kurumsal)
Geri dönüş görünür sorunu Web sitesi karar verir CloudFlare tarafından yönetilmektedir Resim ızgarası açılır penceresi Resim ızgarası açılır penceresi
CaptchaAI desteği Evet (v3 belirteci) Evet (%100 başarı) Evet (jeton) Desteğe başvurun

Puan politikası örnekleri

  • İş akışı üretim trafiğine ulaşmadan önce yüksek, orta ve düşük puanlar için ne olacağını tanımlayın.
  • Hedefin altındaki her puanı başarısızlık olarak ele almak yerine, adım adım kontrolleri tetiklemek için orta puan sonuçlarını kullanın.
  • Puan dağılımını zaman içinde günlüğe kaydedin, böylece hedef taraftaki eşik kayması, dönüşüm düşmeden önce görünür hale gelir.

Sık sorulan sorular

Bir sayfanın görünmez bir CAPTCHA'ya sahip olup olmadığını nasıl anlarım?

CAPTCHA sağlayıcı komut dosyaları için sayfa kaynağını kontrol edin. recaptcha/api.js?render= (reCAPTCHA v3), challenges.cloudflare.com/turnstile (Turnstile) veya data-size="invisible" (hCaptcha pasif) ile hcaptcha.com/1/api.js'yi arayın. CAPTCHA widget'ının sayfada görünür bir varlığı yoktur, bu nedenle HTML'yi veya ağ isteklerini incelemeniz gerekir.

Görünmez bir CAPTCHA hala bir jeton üretiyor mu?

Evet. Görünmez CAPTCHA'lar, form gönderimlerine dahil edilmesi gereken belirteçler oluşturur. Belirteç gizli bir form alanına yerleştirilir veya istek parametresi olarak gönderilir. API tabanlı çözücüler bu belirteçleri harici olarak oluşturur.

Görünmez CAPTCHA'lar otomasyonumu herhangi bir hata göstermeden engelleyebilir mi?

Evet. Otomasyonunuz form gönderiminde geçerli bir CAPTCHA belirteci içermiyorsa sunucu, isteği sessizce reddeder veya genel bir hata döndürür. Görünür bir CAPTCHA sorgulaması olmayacak; belirteç eksik veya geçersiz olduğundan istek başarısız oluyor.

reCAPTCHA v3, reCAPTCHA v2'den daha mı güvenli?

reCAPTCHA v3'nin görsel olarak tespit edilmesi daha zordur (sayfada widget yoktur) ancak daha güvenli olduğu söylenemez. v3, web sitesinin dikkate alması gereken bir puan döndürür; eşik çok düşük ayarlanırsa botlar kolayca geçebilir. v2 kesin bir meydan okumayı zorunlu kılar/response. Uygulamada, katı bir eşiğe (0,7+) sahip v3 artı geri dönüş olarak v2 en iyi güvenliği sağlar.


Özet

Görünmez CAPTCHA'lar, herhangi bir görünür etkileşim olmadan tarayıcı davranışı, cihaz parmak izleri ve ağ itibarına ilişkin arka plan JavaScript analizi yoluyla kullanıcıları doğrular. reCAPTCHA v3 ve Cloudflare Turnstile baskın uygulamalardır ve Turnstile, ücretsiz fiyatlandırması ve gizliliği ön planda tutan tasarımı nedeniyle en hızlı şekilde büyümektedir. Otomasyon için görünmez CAPTCHA'lar hâlâ geçerli jetonlara ihtiyaç duyuyor. KullanmakCaptchaAIBu belirteçleri oluşturmak için: version=v3 ile userrecaptcha yöntemi aracılığıyla reCAPTCHA v3 ve %100 başarı oranıyla turnstile yöntemi aracılığıyla Cloudflare Turnstile.

İlgili Makaleler

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