Regarding CAPTCHAs: Ben gerçekten ihtiyacınız olmadıkça CAPTCHA'ları kullanarak karşı öneriyoruz. Neden?
- çirkin.
- bu kullanıcılar için sinir bozucu. Onları sitenizde kullanmak için çemberler üzerinden atlamak yapmamalıyız.
Çok basit, çok etkili olabilir ve (almost all) em> kullanıcılara tamamen şeffaf olan bazı alternatifler vardır.
Honeypot fields: "web sitesi" gibi ortak bir adla formlarına bir alan eklemek. Bunun yanında, "bu kutuya yazmayın" etkisi bir şey söyleyerek bir etiket ekleyin. Javascript giriş ve etiket gizlemek kullanma. Eğer bir form gönderme aldığınızda, alanında herhangi bir şey varsa, girdi olarak reddedecektir.
JS ile kullanıcılar göremez ve iyi olacak. JS olmayan kullanıcılar sadece basit talimatları takip etmek zorunda kalacak. Spambots bunun için sonbahar ve kendilerini ortaya çıkaracaktır.
Automatic faux-CAPTCHA: Bu işlem, yukarıda benzer. Diyerek bir etiket ile bir giriş alanını ekleyin "Write 'Alex'" (örneğin). Javascript kullanarak (ve çoğu otomatik spam botlara JS aday olmayacağını bilerek), alanını gizlemek ve 'Alex' ile doldurmak. Gönderilen form orada sihirli kelime yoksa, o zaman bunu görmezden.
JS ile kullanıcılar göremez ve iyi olacak. JS olmayan kullanıcılar sadece basit talimatları takip etmek zorunda kalacak. Spambots ne olacağını bilmiyorlar ve onların girişini gözardı edebilirsiniz.
Bu otomatik spam botlara% 99.9 sizi korumak olacaktır. Bunu yapmayacağım ne, hatta ufak bir hedef saldırıya karşı sizi korumak olduğunu. Birisi bal küpü önlemek için bot özelleştirmek veya her zaman doğru değer doldurabilir.
Regarding Brute Force blocking: Bir sunucu tarafı çözümü açıkça bunu yapmak için tek geçerli yoldur. Benim şimdiki projelerinden biri için, sana açıklamak ne çok benzer bir kaba kuvvet koruma sistemi uygulanmaktadır. Bu CakePHP için bu Brute Force Protection plugin dayanmaktadır.
Algoritma oldukça basit, ama biraz başlangıçta kafa karıştırıcı.
- Kullanıcı bazı eylem istekleri (parola sıfırlama, örneğin)
- Çalıştırın:
DELETE * FROM brute_force WHERE expires < NOW()
Çalıştırın:
SELECT COUNT(*) FROM brute_force
WHERE action = 'passwordReset'
AND ip = <their ip address>
- Sayısı büyükse
X
, sonra bir süre beklemelerini söyle.
Aksi halde, çalıştırın:
INSERT INTO brute_force (ip, action, expires)
VALUES (<their ip address>, 'passwordReset', NOW() + Y minutes)
- Reset şifre fonksiyonu ile devam edin.
Bu, kullanıcıların sadece Y dakika içinde bir parola X kez sıfırlamayı deneyin sağlayacaktır. Uygun gördüğünüz gibi bu değerleri Tweak. 5 dakika içinde belki 3 sıfırlar? Ayrıca, her bir eylem için farklı değerlere sahip olabilir: bazı şeyler (örneğin: PDF oluşturmak) için, 10 dakika içinde 10 kısıtlamak isteyebilirsiniz.