reCAPTCHA v3 Skoru Nasıl İyileştirilir: İşe Yarayan Altı Düzeltme

improve recaptcha v3 score - How to Improve reCAPTCHA v3 Score: Six Fixes That Work

Bir reCAPTCHA v3 skorunu ayarlayamazsınız. Google bunu istek başına atar ve kodunuzdaki hiçbir şey onu doğrudan değiştirmez. Değiştirebileceğiniz şey onu besleyen unsurlardır: action'ları nasıl adlandırdığınız, token'ı ne zaman istediğiniz, sitenizin ne kadarının reCAPTCHA çalıştırdığı ve backend'inizin sonuçla ne yaptığı. Bunları düzeltin, dağılım değişir.

Genellikle ne kadar yardımcı olduklarına göre sıralanmış altı değişiklik. Önce ölçün, çünkü bir puanlama sorunu olduğunu düşünen sitelerin yarısında aslında bir eşik sorunu vardır.

Skorun gerçekte ne anlama geldiği

v3, her doğrulamada 0.0 ile 1.0 arasında bir sayı döndürür. Google’ın ifadesiyle: 1.0 büyük olasılıkla iyi bir etkileşim, 0.0 ise büyük olasılıkla bir bottur. Onay kutusu ve bulmaca yoktur, dolayısıyla sinyalin tamamı bu sayıdır.

Bundan iki şey çıkar ve ikisi de önemlidir:

  • Skor şudur: istek başına ve eylem başına, kullanıcı başına değil. Aynı ziyaretçi ana sayfanızda 0,9 ve ödemede 0,3 skoru alabilir.
  • Google'ın önerdiği başlangıç eşiği şudur 0.5. Bu, ulaşılacak bir hedef değil, uzaklaşarak ayarlanacak bir varsayılandır.

v3'ün onay kutusu sürümünden nasıl farklı olduğu konusunda yeniyseniz, şu konudaki açıklamamız: reCAPTCHA nasıl çalışır mekaniği kapsar.

Herhangi bir şeyi değiştirmeden önce ölçün

reCAPTCHA yönetici konsolu, siteniz için bir skor dağılımı ve en çok kullanılan on eyleminiz için bir döküm gösterir. Koda dokunmadan önce ona bakın. Üç şekilden birini arıyorsunuz:

  • Her şey 0,9'da, ve yine de insanları engelliyorsunuz. Sorun skor değil, eşiğiniz veya backend mantığınızdır.
  • Geniş bir dağılım düşük uçta bir tümsekle. Normal. Eşiği aksiyon başına ayarlayın.
  • Her şey 0,1 ile 0,3 arasında. Yapısal bir şey yanlış. Genellikle trafik değil, token.

Google ayrıca, staging ortamındaki veya v3'ü kurduktan hemen sonraki skorların üretim ortamından farklı olduğu konusunda uyarır, çünkü modelin site için henüz bir geçmişi yoktur. Sonuç çıkarmadan önce ona bir haftalık gerçek trafik verin. Tek bir isteği izole olarak doğrulamak için, canlı reCAPTCHA v3 test sayfası bir çözüm için ham puanı döndürür.

Düzeltme 1: action'larınızı adlandırın ve doğru adlandırın

Bu en büyük tekil kazançtır ve düzenli olarak atlanır. Google her eylemi ayrı ayrı puanlar ve eylemin kendi geçmişini bağlam olarak kullanır. Tüm site genelinde tek bir genel eylem, tek bir harmanlanmış geçmiş anlamına gelir ve her sayfa bunun en kötüsünü miras alır.

// One action per meaningful event. Not one for the whole site.
grecaptcha.ready(function () {
  grecaptcha.execute("YOUR_SITEKEY", { action: "login" })
    .then(function (token) {
      document.getElementById("recaptcha-token").value = token;
    });
});

Google'ın uyguladığı kurallar: action'lar yalnızca alfanümerik karakterler, eğik çizgiler ve alt çizgiler içerebilir ve kullanıcıya özgü olmamalıdır. Yani checkout/payment sorun değil, checkout_user_8842 değildir. Kullanıcıya özgü bir eylem, geçmişi hiçbirinde veri olmayan binlerce kovaya böler; bu da eylemleri hiç adlandırmamaktan daha kötüdür.

Düzeltme 2: reCAPTCHA'yı yalnızca formda değil, daha fazlasında çalıştırın

v3 davranışı puanlar ve davranışın birden fazla veri noktasına ihtiyacı vardır. Script yalnızca giriş sayfanızda yükleniyorsa, Google bir formda beliren ve gönderim yapan bir ziyaretçi görür ki bu tam olarak bir botun görünüşüdür.

Google’ın kendi önerisi, v3'ü üzerinde form olmayan sayfalar dâhil olmak üzere site genelinde yüklemektir. Bu sayfalarda doğrulama yapmanız gerekmez. Yalnızca script'i çalıştırmak, ziyaretçi önemsediğiniz eyleme ulaştığında modele üzerinde çalışacak bir şeyler verir.

Bu aynı zamanda insanların yanlışlıkla geri aldığı düzeltmedir. Betiği yalnızca ödeme rotasında tetiklenen bir koşulun içine taşımak, puanlarınızı günler içinde düşürür.

Düzeltme 3: token'ı sayfa yüklenirken değil, gönderdiğinizde alın

reCAPTCHA v3 token'ları verildikten iki dakika sonra sona erer. Birini şurada oluşturun: ready() sayfa yüklenirken ve formunuzu bundan daha uzun süre okuyan herhangi bir ziyaretçi ölü bir token gönderir. Backend'inizin bu hatayı nasıl ele aldığına bağlı olarak bu, kötü bir puan veya sert bir reddedilme olarak yorumlanır.

// Solve on submit so the token is always fresh.
form.addEventListener("submit", function (e) {
  e.preventDefault();
  grecaptcha.execute("YOUR_SITEKEY", { action: "login" })
    .then(function (token) {
      tokenField.value = token;
      form.submit();
    });
});

Uzun formlar, çok adımlı ödemeler ve dosya yüklemesi olan her şey, bunun en çok zorluk çıkardığı yerlerdir.

Düzeltme 4: sunucu tarafında doğrulayın ve eylemi de kontrol edin

Token, arka ucunuz onu takas edene kadar değersizdir. Bu takas; puanı, action'ı ve bir ana bilgisayar adını döndürür ve üçünü de kontrol etmelisiniz.

# Exchange the token for the score. Server side only.
curl -X POST https://www.google.com/recaptcha/api/siteverify \
  -d secret=YOUR_SECRET_KEY \
  -d response=THE_TOKEN_FROM_THE_PAGE

# {"success":true,"score":0.9,"action":"login","hostname":"example.com"}

Yalnızca kontrol ederseniz success, v3'ü hiç kullanmıyorsunuz demektir. success token'ın ayrıştırıldığı anlamına gelir, ziyaretçinin insan gibi göründüğü anlamına gelmez. Ve eğer karşılaştırmazsanız action o uç noktanın beklediğiyle karşılaştırılmadığında, düşük değerli bülten formunuzda üretilen bir token giriş uç noktanızda sorunsuz çalışır.

Çözüm 5: site için tek bir eşik değil, action başına bir eşik belirleyin

Bir ödeme (checkout) ve bir bülten kaydı aynı eşiği paylaşmamalıdır. Her action için bir haftalık veriye sahip olduğunuzda, her birini trafiğinizin gerçekte bulunduğu yere ayarlayın.

Action türüMakul bir başlangıç noktasıAltında ne yapılmalı
Bülten, arama, sayfa görüntüleme0.3İzin ver, skoru kaydet
Giriş, yorum0.5İkinci bir faktör veya bir v2 checkbox ekleyin
Ödeme, şifre sıfırlama0.7Manuel bir doğrulamaya geçin

Bu satırların hiçbirinin “engelle” demediğine dikkat edin. Düşük bir skorda kesin engelleme, v3 dağıtımlarının kurumsal VPN'lerdeki ve gizlilik tarayıcılarındaki gerçek müşterileri dışarıda bırakma şeklidir. Bunun yerine challenge'ı yükseltin.

Düzeltme 6: her zamanki skor katillerini eleyin

Yapısal düzeltmelerin tümü yerindeyse ve puanlar hâlâ düşükse, şunları sırayla inceleyin:

NedenNeden düşük skor alır
Bir sayfada iki reCAPTCHA betiğiİkinci yükleme birincinin üzerine yazar ve token yanlış bağlama bağlanır
Paylaşımlı veya veri merkezi IP'leriOfis NAT'ı, VPN'ler ve bulut çıkışının tümü başkalarının geçmişini taşır
Agresif gizlilik uzantılarıEngellenen çerezler ve depolama, modele okuyacak hiçbir şey bırakmaz
Iframe içindeki veya gömülü formlarCross-origin bağlam sinyali zayıflatır
Sitekey ve alan adı uyumsuzluğuŞunu kontrol edin: hostname doğrulama yanıtındaki alan

Şöyle bir şey değil bu listede: rozeti gizlemek. Bu bir CSS ve atıf meselesidir ve skorlamaya hiçbir etkisi yoktur. Bunu uyumlu şekilde yapmanın yolunu şurada ele aldık reCAPTCHA v3 rozetini gizleme.

Ayarlamanın çözemeyeceği sorun

Trafik otomatikse düşük skor alır, çünkü v3 tam da bunu algılamak için tasarlanmıştır. Hiçbir action adlandırması bir headless tarayıcıyı düzeltmez. Kendi sitenizi test etmek veya çalıştırmaya yetkili olduğunuz otomasyon için, token'ı sayfadan değil bir çözücüden alırsınız:

# pip install capskip
from capskip import CapSkip

solver = CapSkip(host="127.0.0.1", port=8080)

result = solver.recaptcha(
    sitekey="YOUR_SITEKEY",
    url="https://example.com/page-with-recaptcha",
    version="v3",
    action="login",     # must match the page
)

print(result["code"])   # token, inject it and submit

Şuna dikkat edin: action tekrar. Bu tarafta da sizin tarafınızda olduğu kadar önemlidir, tam olarak aynı nedenle: backend bunu karşılaştırır.

Yapamayacağınız şey bir skor belirlemektir. Çözüm isteğinde minimum skor parametresi yoktur. Sayı, token'ınız doğrulandığında verilen Google’ın kararıdır, bu yüzden bir çözücü size bir token verir, başka bir şey vermez.

Sık sorulan sorular

reCAPTCHA v3 puanım neden hep 0.1?

Tüm trafik boyunca sabit bir 0,1 neredeyse hiçbir zaman bir davranış sorunu değildir. Yinelenen bir script etiketi, gönderimden iki dakikadan fazla önce verilmiş bayat bir token veya farklı bir alan adına kayıtlı bir sitekey olup olmadığını kontrol edin. hostname verify yanıtındaki alan, sonuncuyu hemen halleder.

Puan değişikliklerinin görünmesi ne kadar sürer?

Birkaç gün. Model, site ve action başına geçmişi kullanır; bu nedenle yeni bir action bağlam olmadan başlar ve trafik biriktikçe yerine oturur. Bir değişikliği bir öğleden sonralık veriye göre yargılamayın.

Daha yüksek bir skor eşiği sitemi daha güvenli yapar mı?

Yalnızca belirli bir noktaya kadar ve bu size gerçek kullanıcılara mal olur. Her uç noktayı 0,9'a yükseltmek, kararlı bir saldırganı durdurmadan çok önce paylaşımlı IP'lerdeki ve gizlilik tarayıcılarındaki insanları engeller. Eşiği eylem başına ayarlayın ve doğrudan reddetmek yerine challenge'ı kademeli olarak artırın.

Arka uç kodu yazmadan puanı görebilir miyim?

Evet. Yönetici konsolu kendi sitenizin dağılımını gösterir ve v3 demo sayfamız tek bir çözüm için ham skoru döndürür, böylece bir isteği kendi uç noktanızın raporladığıyla karşılaştırabilirsiniz.

Özet

Olay başına bir action adlandırın, v3'ü site genelinde yükleyin, token'ı gönderim anında üretin, sunucu tarafında doğrulayın ve action'ı karşılaştırın, ardından tek bir global eşik yerine uç nokta başına bir eşik belirleyin. Yönetici konsolunu aynı gün değil, bir hafta sonra kontrol edin.

v3 puanlamasının işleyişi ve bununla birlikte gelen seçenekler için şuna bakın: reCAPTCHA v3 çözümü, ve Google’ın kendi v3 dokümantasyonu eşikler ve action adlandırması konusunda yetkili kaynaktır. Kendi formlarınızı düşük bir skora karşı test ediyorsanız, CapSkip bir captcha çözücü yerel olarak çalışır; böylece çözüm başına fatura olmadan gün boyu token üretebilirsiniz.