Bir formu gerçekte ne korur: CAPTCHA, tuzak alan, zaman tuzağı, CSRF
Çoğu iletişim formu spama karşı tek bir yönteme dayanır ve bu yöntemlerin birçoğu yalnızca en basit botları durdurur. Her koruma katmanının neleri durdurduğu, maliyeti ve hangi birleşimin mantıklı olduğu.
İletişim formları üzerinden gelen spam nadiren elle yazan bir kişiden gelir. Çoğunlukla formları bulan, her alanı dolduran ve sonucu binlerce kez gönderen yazılımlardır. Birden fazla savunma yöntemi vardır ve çok farklı noktalarda çalışırlar. Her birinin gerçekte ne yaptığını bilmek iki hatadan kaçınmanıza yardımcı olur: gerçek koruması olmayan bir form ve gerçek insanların vazgeçeceği kadar sıkı korunan bir form.
- Tuzak alan: her alanı dolduran basit botlar
- Zaman tuzağı: yüklemeden hemen sonra gönderim yapan betikler
- CAPTCHA: genel amaçlı otomasyonun çoğu
- CSRF token'ı: doğrudan uç noktaya gönderilen istekler
- Hız sınırı: tek bir kaynaktan gelen gönderim selleri
- İş ispatı: izleme veya bulmaca olmadan ucuz toplu gönderimler
- Sunucu tarafı kontroller: tarayıcıyı atlayan her şey
- Hedefli botlar bunu atlar; kötü gizlenmişse ekran okuyucular bunu seslendirir
- Bekleyen botlar; sunucu tarafı imza olmadan taklit edilmesi kolaydır
- Herkes için bir engel, erişilebilirlik sorunları, genellikle üçüncü taraf; çözme hizmetleri de vardır
- Önce sayfayı yükleyen botlar da geçerli token alır
- Çok sayıda IP adresine dağıtılan spam
- İşlem gücü olan kararlı bir gönderen; JavaScript gerektirir
- Tek başına hiçbir şey; ancak bunlar olmadan diğer tüm katmanlar süsten ibarettir
Tuzak alan ve zaman tuzağı: görünmez filtreler
Tuzak alan, CSS ile gizlenmiş “website” adlı bir alan gibi, insanların hiç görmediği ek bir alandır. Basit botlar her alanı doldurduğundan dolu bir tuzak alan otomasyona işaret eder ve sunucu mesajı sessizce atabilir. Siteniz için yazılmış veya sayfayı tarayıcı gibi işleyen botlar bunu atlar. Doğru gizleyin: yalnızca ekran dışına taşınmış bir alan, ekran okuyucular tarafından seslendirilebilir, Tab tuşuyla erişilebilir veya otomatik doldurmayla doldurulabilir. aria-hidden, tabindex -1 ve autocomplete off kullanın; ayrıca oraya gelen kişiden alanı boş bırakmasını isteyen tarafsız bir etiket ekleyin.
Zaman tuzağı, formun ne zaman sunulduğunu kaydeder ve gerçekçi olmayacak kadar hızlı gelen gönderimleri reddeder. İnsanların okumak ve yazmak için birkaç saniyeye ihtiyacı vardır; birçok betik ise saniyenin kesirleri içinde gönderir. Zaman damgası sunucuda kontrol edilmeli ve örneğin imzalanarak veya oturumda tutularak kurcalamaya karşı korunmalıdır; düz bir gizli zaman alanını bot kolayca yeniden yazar. Otomatik doldurma gerçek insanları da hızlandırdığı için eşiği düşük tutun. Yalnızca bekleyen botlar geçer: zaman tuzağı bir filtredir, duvar değildir.
CAPTCHA: etkili, ama bedelsiz değil
Bir CAPTCHA, botun işlem yapmadığına dair kanıt ister: görsel bulmacalardan arka planda çalışan kontrollere kadar uzanır; yaygın hizmetler arasında reCAPTCHA, hCaptcha, Cloudflare Turnstile ve Friendly Captcha bulunur. Genel amaçlı otomasyonun çoğunu durdurur; bu nedenle çok popülerdir. Ancak görünen her bulmaca, bazı ziyaretçilerin vazgeçtiği bir engeldir ve çoğu hizmet üçüncü taraf betiği yükler; bu da gizlilik ve rıza sorularını doğurur. CAPTCHA ayrıca yalnızca doğru kurulmuşsa işe yarar: herkese açık bir test site anahtarı, betiği olmayan bir bileşen veya sunucunun hiç doğrulamadığı bir token koruma gibi görünür ama koruma sağlamaz. formexposed.com'daki ücretsiz kontrol bu tür hatalara dışarıdan işaret eder.
Erişilebilirlik de bu maliyetin bir parçasıdır. Görsel bulmacalar görmeyenleri ve az gören birçok kişiyi dışarıda bırakır, sesli alternatifler hem işitme hem görme engeli olanlara yardımcı olmaz ve zor mantık görevleri bilişsel engeli olan kişilere yük olur. WCAG 2.2 başarı ölçütü 1.1.1, CAPTCHA'nın amacını açıklayan bir metin alternatifi ve farklı duyulara yönelik alternatif biçimler gerektirir. Arka plan kontrolleri bunların çoğunu önler; ancak şüphe duyduklarında yedek yöntem genellikle yine görsel bir bulmacadır. Bu yolu klavyeyle ve ekran okuyucuyla test edin.
CSRF token'ı: spama değil, sahteciliğe karşı koruma
CSRF token'ı, sunucunun forma koyduğu ve geri gelmesini beklediği rastgele bir değerdir. Başka bir web sitesinin, ziyaretçinin tarayıcısına onun hiç amaçlamadığı bir isteği gönderttiği siteler arası istek sahteciliğine karşı tasarlanmıştır. Herkese açık bir iletişim formunda bir yan etkisi vardır: sayfayı yüklemeden doğrudan form adresine gönderim yapan botlar reddedilir. Sayfayı alıp token'ı geri gönderen her bot geçer. Çoğu çerçeve ve form eklentisi zaten CSRF token'ı içerir; bunları açık tutun, ancak spam koruması olarak saymayın.
Sunucuda yapılması gerekenler
- Her alanı sunucuda yeniden doğrulayın: zorunlu alanlar, uzunluk, e-posta biçimi ve posta üstbilgilerine girecek alanlarda satır sonu bulunmaması.
- Her gönderimde CAPTCHA ve iş ispatı token'larını, bunları veren hizmet üzerinden veya kendi kodunuzda doğrulayın ve yeniden kullanılan token'ları reddedin.
- IP adresi ve zaman aralığı başına gönderimleri sınırlayın. Bu, tek bir kaynaktan gelen selleri durdurur; birçok adrese yayılmış spam için başka katmanlar gerekir.
- İş ispatını değerlendirin: göndermeden önce tarayıcı küçük bir hesaplama görevi çözer. Ziyaretçiler bulmaca görmez ve hiçbir şey izlenmez; ancak toplu gönderim maliyetli hale gelir.
Mantıklı bir birleşim: iki veya üç katman
- 1Görünmez katmanlarla başlayın: erişilebilir bir tuzak alan ve imzalı bir zaman tuzağı; her ikisi de sunucuda kontrol edilmelidir.
- 2Tek bir kaynağın formu gönderim seline boğamaması için IP adresi başına hız sınırı ekleyin.
- 3Hedefli spam hâlâ geçiyorsa iş ispatı veya CAPTCHA ekleyin; tercihen görünür bulmacası olmayan ve erişilebilir alternatifi bulunan bir yöntem.
- 4Çerçevenizin sağladığı CSRF token'ını tutun; savunma olarak değil, ek yarar olarak.
- 5Sonucu bir ziyaretçi gibi test edin: yalnızca klavyeyle, ekran okuyucuyla, telefonda. Gerçek mesajların hâlâ ulaştığını kontrol edin.
Birçok sitede tuzak alan, zaman tuzağı ve hız sınırı birlikte, görünür bir engel olmadan genel amaçlı spamın çoğunu zaten kaldırır; CAPTCHA bunların yetmediği durumlar için yedektir. WordPress'te ücretsiz formexposed eklentisi Google'a ihtiyaç duymadan tuzak alanı, zaman kontrolünü ve iş ispatını birleştirir. Formunuzun dışarıdan nasıl göründüğünü — hangi katmanların mevcut olduğunu, CAPTCHA'nın etkili yapılandırılıp yapılandırılmadığını — görmek için formexposed.com'daki ücretsiz kontrole yalnızca bir alan adı gerekir, hesap gerekmez. Sunucu kodunuzu göremez; bu nedenle sunucu tarafı bölüm sizin göreviniz olarak kalır.