iyi bir başlangıç olacağını sadece sleep(1);
sonra başarısız oturum açma girişimi - uygulanması kolay, neredeyse bug-free.
1 saniye (insanlar tarafından oturum açma girişimleri genellikle başarısız değilsiniz, özellikle çünkü) bir insan için çok değil, ama 1sec/try kaba kuvvet ... sloooow! Sözlük saldırıları başka bir sorun olabilir, ancak aynı etki alanında bulunuyor.
Saldırgan bu aşmak için çok may bağlantıları başlarsa, DOS atak bir türlü başa. sorun çözüldü (ama şimdi başka bir sorun ^ ^ var).
düşünmelisiniz bazı şeyler:
- Eğer bir IP bazında soley hesaplarını kilitlemek ise, özel ağlar ile ilgili sorunlar olabilir.
- Eğer bir kullanıcı adı bazda soley hesaplarını kilitlemek eğer, denial-of-service saldırıları agains Adlarını mümkün olacaktır bilinir
- (username saldırıya biri olduğu) bir IP / username bazında kilitleme iyi işe yarayabilir
my suggestion:
complete locking is not desireable (DOS), so a better alternative would be: count the login attempts for a certain username from a unique IP. you could do this with a simple table failed_logins: IP/username/failed_attempts
giriş başarısız olursa, wait(failed_attempts);
saniye. her xx dakika, failed_logins:failed_attempts
teker azalır bir cron komut dosyasını çalıştırın.
Üzgünüm, ben bir premade çözüm sağlayamaz, ama bunu uygulamak için önemsiz olmalıdır.
Tamam, tamam. Burada pseudocode bulunuyor:
<?php
$login_success = tryToLogIn($username, $password);
if (!$login_success) {
// some kind of unique hash
$ipusr = getUserIP() . $username;
DB:update('INSERT INTO failed_logins (ip_usr, failed_attempts) VALUES (:ipusr, 1) ON DUPLICATE KEY UPDATE failed_logins SET failed_attempts = failed_attempts+1 WHERE ip_usr=:ipusr', array((':ipusr' => $ipusr));
$failed_attempts = DB:selectCell('SELECT failed_attempts WHERE ip_usr=:ipusr', array(':ipusr' => $ipusr));
sleep($failed_attempts);
redirect('/login', array('errorMessage' => 'login-fail! ur doin it rong!'));
}
?>
disclaimer: bu belli bölgelerde çalışmayabilir. duyduğum son şey Asya'daki bütün bir ülke NAT'lanmış (ayrıca, hepsi kung-fu biliyorum) var oldu.