Captcha nasıl çalışır?
Captcha, Completely Automated Public Turing test to tell Computers and Humans Apart ifadesinin kısaltmasıdır; Türkçesiyle "bilgisayarları ve insanları ayırt etmek için tamamen otomatik, herkese açık Turing testi". Adı 2003'te Carnegie Mellon Üniversitesi'ndeki araştırmacılar koydu ve fikir o günden beri aynı: insan için kolay, program için zor bir şey sor ve isteği yalnızca cevap doğruysa kabul et.
Eğri büğrü bir kelimeden görünmez bir kontrole kadar her captcha üç adımda işler. Kutucuk ziyaretçinin tarayıcısında çalışır ve bir token üretir: testin geçildiğinin kanıtı. Tarayıcı bu tokenı formla birlikte gönderir. Sunucunuz da hesabı açmadan ya da mesajı iletmeden önce captcha sağlayıcısına tokenın gerçek olup olmadığını sorar.
Atlanan adım hep üçüncüsüdür ve o olmadan kutucuk süsten ibarettir: bot formu tokensız ya da eski bir tokenla gönderir, geçer. Tokenlar tam da bu yüzden kısa ömürlü ve tek kullanımlıktır; kontrol sunucuda, her gönderimde yapılmalıdır.
Sunucu tarafı doğrulama: kutucuğa anlam kazandıran adım
curl -s https://www.google.com/recaptcha/api/siteverify \
-d secret="$RECAPTCHA_SECRET" \
-d response="$FORMDAN_GELEN_TOKEN"
# {"success": true, "hostname": "example.com", ...}
# hCaptcha ve Turnstile de aynı şekilde çalışır; her birinin kendi siteverify adresi vardır.
Türleri: eğri harflerden bulmacasız kontrole
Metin captcha'ları bozulmuş harf ve rakamlar gösterir. İlk nesil bunlardı ve bugün en zayıfları da bunlar: karakter tanıma yazılımları onları birçok insandan daha iyi okuyor.
Görsel captcha'lar trafik ışığı ya da bisiklet olan bütün kareleri seçmenizi ister. Sesli captcha'lar gürültü üzerinden rakam okur ve esas olarak ilk ikisinin erişilebilir alternatifi olarak vardır.
reCAPTCHA v2, yani Google'ın kutucuğu, 2014'te modeli değiştirdi. "Ben robot değilim" işareti, betiğin tarayıcıya ve nasıl davrandığına bakması için bir andır; resim ızgarasını yalnızca emin olamadığı ziyaretçi görür. Görünmez sürümü kutucuğu da kaldırır, ızgarayı yalnızca gerektiğinde gösterir.
reCAPTCHA v3 (2018) hiçbir şey göstermez. Her işlem için 0.0 ile 1.0 arasında bir skor döndürür; düşük skorun ne anlama geleceğine sunucunuz karar verir: reddetmek, ikinci bir doğrulama istemek ya da gönderimi moderasyona almak.
hCaptcha v2 modelini izler: arka planda kontroller, şüphede bir resim görevi. Kendini gizlilik üzerinden konumlar; kurumsal sürümü risk skoru da verir.
Cloudflare Turnstile (2022) bulmacanın yerine tarayıcıda çalışan, etkileşimsiz ve dönüşümlü bir kontrol seti koyar. Ücretsizdir ve yalnızca Cloudflare arkasındaki sitelerde değil, her sitede kullanılabilir. Kutucuğunun üç modu vardır: yönetilen (kontroller emin değilse bir onay kutusu), etkileşimsiz ve görünmez.
Listeden yön açıkça görülüyor: her nesil ziyaretçiye daha az, tarayıcıya daha çok soruyor.
Captcha size neye mal olur?
Zaman ve arkasındaki dönüşüm. Stanford'un 2010'daki geniş çaplı çalışması, insanların bir görsel captcha'yı yaklaşık 10 saniyede, sesli bir captcha'yı ise 30 saniyeye yakın sürede çözdüğünü ölçtü; sesli cevapların önemli bir kısmı da yanlıştı. Bu saniyelerin her biri ziyaretçiyle yapmaya geldiği iş arasında durur: kayıt olmak, ödemek, size bir soru sormak.
Erişilebilirlik. Görsel bulmaca görme engelli ve az gören ziyaretçiyi dışarıda bırakır; sesli alternatif herkes için zordur ve hem görme hem işitme güçlüğü olan biri için işe yaramaz. W3C yalnızca captcha'nın erişilemezliğine ayrılmış bir not yayımladı; WCAG de captcha'nın başka bir duyuya hitap eden bir alternatifle sunulmasını şart koşar.
Gizlilik ve sayfa ağırlığı. Kutucuk, sağlayıcının sayfanıza yüklenen ve ziyaretçinin tarayıcısını gören bir betiğidir; gizlilik metninizde yer almalıdır. Aynı zamanda azımsanmayacak boyutta üçüncü taraf JavaScript'tir. Onu yalnızca formun olduğu sayfada yükleyin, sitenin geneline koymayın.
İnsanları yanlış sınıflamak. Risk tabanlı sistemler tipik trafiğin neye benzediğini öğrenir; VPN kullananlar, gizlilik odaklı tarayıcılar ya da kalabalık bir ofis bağlantısı daha az tipik görünür. Bu kişiler hiçbir yanlış yapmadan daha çok bulmaca ya da daha düşük skor alır.
Bulmacalar neden yetmez oldu?
Captcha ancak çözmek bir insan için makineden daha ucuz olduğu sürece işe yarar. Bu bir süredir doğru değil.
Makineler iyileşti. Metin captcha'ları önce karakter tanımaya, resim ızgaraları sonra modern görüntü modellerine yenildi. USENIX Security'de 2023'te sunulan bir çalışma, yaygın kullanılan birkaç captcha türünü botların insanlardan daha hızlı, bozuk metni ise daha isabetli çözdüğünü buldu.
İnsanlar ucuzladı. Yazılımın yetmediği yerde captcha çözme servisleri bulmacayı insan çalışanlara yönlendirip cevabı bir API ile geri döndürüyor; bedeli bin çözüm için birkaç dolar. Spam yapan için bu yuvarlama payı; gerçek ziyaretçiniz içinse bulmaca hep olduğu gibi on saniyelik bir eziyet.
Yani bugün bir captcha esas olarak ucuz otomasyonu eler: tarayıcı gibi görünmeye hiç uğraşmamış betikleri. Bir formun kapısında bu hâlâ yapmaya değer. Ama sitenin geri kalanı için savunma değildir; modern sistemlerin değeri ara sıra gösterdikleri bulmacada değil, topladıkları sinyallerdedir.
Görünmez alternatifler
Bulmacanın yerini alan kontroller bunlar. Hiçbiri ziyaretçiye bir şey sormaz ve birlikte kullanıldıklarında en güçlüdürler.
JS challenge (JavaScript doğrulaması). Sunucu şüpheli ilk isteğe tarayıcıda bir betik çalıştıran küçük bir sayfayla cevap verir. Gerçek tarayıcı bunu yaklaşık bir saniyede bitirir ve imzalı bir çerez alır; yalnızca HTML indiren bir betik bu sayfayı geçemez. Ziyaretçi kısa bir "bağlantınız kontrol ediliyor" sayfası görür ya da hiçbir şey görmez.
Proof of work (iş kanıtı). Tarayıcının küçük bir hesaplama bulmacası çözdüğü bir çeşit. İnsan fark etmez, ama her istek bota işlemci zamanına mal olur ve bu ölçekte birikir.
Rate limiting. Bir istemcinin zaman içindeki istek sayısını sayar. İnsan bir sayfayı okur, dakikada birkaç linke tıklar; bir kazıyıcı yüzlerce istek yapar. Saymak, tek bir isteğin ele vermediği davranışı yakalar.
Bot skorları ve risk sinyalleri. İsteğin nereden geldiği (ev bağlantısı mı, veri merkezi ağı mı), başlıklarının iddia ettiği tarayıcıya uyup uymadığı, istekler boyunca nasıl davrandığı. Bazı sistemler bunları tek bir skorda toplar, bazıları adı konmuş sinyallere göre hareket eder. Her iki durumda da karar sayfa sunulmadan önce verilir.
Honeypot alanları. CSS ile insanlardan gizlenmiş bir form alanı. İnsanlar boş bırakır; saf botlar her alanı doldurur ve kendini ele verir. Ücretsiz, görünmez ve ucuz spama karşı etkili.
Doğrulanmış tarayıcı botları. Arama motorları bütün bunlardan dokunulmadan geçmelidir. Tanınmaları kullanıcı ajanı (user agent) metnine göre değil, geldikleri ağa göre olur; o metni herkes yazabilir.
Captcha hâlâ nerede gerekli?
Tek bir başarılı gönderimin saldırgana bir şey kazandırdığı formlarda: üyelik kaydı, şifre sıfırlama, iletişim ve yorum formları, hediye kartı ve kupon alanları. Orada insana bir ekstra adım makul bir bedeldir ve sunucuda doğrulanan token tam olarak doğru kontroldür.
Biz de böyle kullanıyoruz. cdn.com.tr'nin kayıt ve iletişim formlarında onay kutulu bir captcha var; fiyatlandırma sayfasında ise captcha betiği yalnızca kurumsal iletişim formu açıldığında yükleniyor, yani fiyatlara bakan kimse onu indirmiyor.
Gerekli olmadığı yerler: sıradan sayfa gezintisi, ürün listeleri, makaleler, API'ler ve mobil uygulamalar. Gezintinin önüne konan bir bulmaca, edge'deki görünmez bir kontrolün daha iyi durdurduğu trafiği durdurmak için her ziyaretçiden vergi alır.
CDN.com.tr siteyi bulmacasız nasıl korur?
cdn.com.tr'de bot koruması, origin sunucunuzun önünde, edge'de çalışan bir JavaScript doğrulamasıdır. Panelde Koruma → Güvenlik sayfasındaki Bot Koruması (JS Challenge) kartıdır ve üç modu vardır: kapalı, riskli ziyaretçiler (önerilen) ve herkese. Mod değişikliği edge'e kendiliğinden ulaşır; ayrıca bir yayın adımı yoktur.
Riskli ziyaretçiler modunda yalnızca bir risk sinyali taşıyan istekler doğrulanır: gerçek okurların nadiren geldiği veri merkezi ve bulut ağlarından gelen trafik; kendini arama motoru olarak tanıtıp o motorun kullanmadığı bir ağdan gelen istemci; boş ya da neredeyse boş bir kullanıcı ajanı; tek bir adresten ani bir sayfa görüntüleme dalgası. Ev ya da mobil bağlantıdaki bir okur hiçbir şey görmez.
Yalnızca sayfa gezintileri doğrulanır. Görseller, stil dosyaları, betikler, API çağrıları ve form gönderimleri dokunulmadan geçer; cache isabet oranınız ve uygulamalarınız etkilenmez. Doğrulanmış arama motoru botları (Google, Bing, Yandex, Apple ve DuckDuckGo) her zaman geçer; gönderdikleri isme değil, gerçekten geldikleri ağa göre kontrol edilirler. Yani doğrulama size asla indeks kaybettirmez.
Doğrulamaya düşen ziyaretçi yaklaşık bir saniye boyunca kendi dilinde (yedi dil hazır, diğerlerine İngilizce) kısa bir "Bağlantınız kontrol ediliyor" sayfası görür, ardından istediği sayfa açılır. Kontrol sayfası noindex ile 503 olarak gider, yani arama sonuçlarına asla düşmez. Geçen ziyaretçiye 30 dakika boyunca tekrar sorulmaz; izin çerezi ziyaretçinin adresine ve tarayıcısına bağlıdır, başka bir makineye kopyalanamaz.
Herkese modu her yeni ziyaretçinin ilk sayfa görüntülemesini kontrolden geçirir. Saldırının ortasında kullanılacak bir kaldıraçtır, sıradan günlerin ayarı değil; panel de açmadan önce onay ister.
Neyi durdurdu, arkasında ne var?
Her JavaScript doğrulamasının tavanı budur: gerçek bir tarayıcıyı süren bir bot betiği çalıştırabilir. Doğrulamanın aynı edge'deki birkaç katmandan biri olmasının nedeni de bu. Hesap geneline ya da dağıtım kuralı bazında konan ve istemci adresi başına sayılan bir rate limiting kuralı, bütçesini aşan her isteğe 429 ile cevap verir; başsız tarayıcı filosunu pahalı kılan budur. WAF isteklerin taşıdığını inceler, ülke ve ASN kuralları da hiç duymak istemediğiniz bir ağı 403 ile kapatır.
Doğrulama kartı kendi istatistiklerini tutar: gösterilen doğrulamalar, geçilen doğrulamalar, geçirilen doğrulanmış botlar, ziyaretçilerin neden doğrulandığı ve en çok doğrulanan ağlar; son bir saat, gün, hafta ya da ay için. Sıfıra yakın bir geçme oranı istediğiniz sonuçtur: durdurulanların insan olmadığı anlamına gelir.
Hangi araç, ne zaman?
Sayfalar tarayıcı gibi görünen istemcilerce kazınıyor ya da boğuluyorsa: riskli ziyaretçiler modunda bot koruması.
Saldırı sürüyorsa: saldırı boyunca herkese modu, sonra yeniden riskli ziyaretçiler.
Giriş sayfasında şifre deneme varsa: o yola sıkı bir rate limiting kuralı ve formda captcha.
Spam kayıt ve iletişim mesajları geliyorsa: formda sunucuda doğrulanan bir captcha ya da Turnstile, yanında bir honeypot alanı.
Hiç hizmet vermediğiniz bir ağdan trafik geliyorsa: ASN ya da ülke kuralı.
SQL injection gibi zararlı içerik varsa: WAF. Doğrulama kimin sorduğuna bakar, ne gönderdiğine değil. Hacimli saldırılar için DDoS koruması rehberine bakın.
Sık sorulan sorular
Captcha ne demek, açılımı nedir?
Completely Automated Public Turing test to tell Computers and Humans Apart; yani bilgisayarları ve insanları ayırt etmek için tamamen otomatik, herkese açık Turing testi. Terim 2003'te Carnegie Mellon Üniversitesi'nde ortaya çıktı. "Turing testi" kısmı, Alan Turing'in bir makinenin insan yerine geçip geçemeyeceğini sınayan testine gönderme yapar; burada ters çevrilmiştir, hakem makinedir.
reCAPTCHA v3 hiçbir şey göstermiyorsa yine captcha mıdır?
Aynı servis, farklı bir sözleşme. v3 hiç bulmaca göstermez; her işlem için 0.0 (muhtemelen bot) ile 1.0 (muhtemelen insan) arasında bir skor döndürür ve ne yapılacağına sunucunuz karar verir. Bu onu bir testten çok bir bot skoru yapar; eşikleri ve altında ne olacağını seçmek gibi asıl iş size kalır.
Botlar captcha çözebilir mi?
Evet. Görüntü modelleri metin ve resim bulmacalarını çözüyor, çözücü servisler de kalanını bin çözüm için birkaç dolara ücretli insan çalışanlara aktarıyor. Captcha hâlâ spamın çoğunu oluşturan ucuz otomasyonu eler, ama tek savunmanız olmamalı.
Cloudflare Turnstile yalnızca Cloudflare kullanan siteler için mi?
Hayır. Turnstile bir kutucuk ve sunucu tarafı bir doğrulama çağrısından oluşur; başka bir CDN üzerinden sunulanlar dahil her sitede çalışır. Her captcha gibi, ancak sunucunuz her gönderimde tokenı doğrularsa korur.
Captcha ya da bot doğrulaması SEO'ya zarar verir mi?
Formdaki captcha vermez, çünkü arama motoru botları form göndermez. Sayfaların önündeki bir doğrulama ise botları durdurursa verir. cdn.com.tr doğrulamasının doğrulanmış Google, Bing, Yandex, Apple ve DuckDuckGo botlarını geçirmesi ve kontrol sayfasını noindex ile 503 olarak göndermesi bu yüzdendir; sayfa asla indekslenmez.
Bot korumasını açarsam yine captcha gerekir mi?
Saldırganların göndermek istediği formlarda evet. Doğrulama sayfalarınızı kimin yükleyebileceğine karar verir; form gönderimlerine bakmaz. Kayıt, giriş ve iletişim formları captcha'larını korur, o yollara konan bir rate limiting kuralı da kimsenin ne kadar hızlı deneyebileceğini sınırlar.
Doğrulamaya düşen ziyaretçi ne görür?
Yaklaşık bir saniye boyunca kendi dilinde kısa bir "Bağlantınız kontrol ediliyor" sayfası; ardından istediği sayfa kendiliğinden açılır. Tarayıcısında JavaScript açık olmalıdır. Bir kez geçtikten sonra 30 dakika boyunca tekrar sorulmaz.