PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nach 3 erfolglosen Loginversuchen Sperre für XX Sekunden



jpwfour
10.07.2008, 20:48
So, da das an sich nicht viel Aufwand sein sollte, hier mal ne schnelle Anleitung dazu:

SQL:


ALTER TABLE `vms_kontodaten` ADD `f_logins` TINYINT( 2 ) NOT NULL DEFAULT '0',
ADD `f_time` INT( 11 ) NOT NULL ;datei lib/session.lib.php:

suchen:


// Wenn es den User garnicht giebt
} else {
$_GET['content'] = '/error/kein_zutritt';
}ersetzen:


// Wenn es den User garnicht giebt
} else {
$_GET['content'] = '/error/kein_zutritt';
db_query('UPDATE '.$db_prefix.'_kontodaten k, vms_userdaten u SET k.f_logins=k.f_logins+1,

k.f_time='.time().' WHERE u.nickname="'.$_POST['nickname'].'" AND k.uid=u.uid ');
}

}
jetzt werden schon mal falsche logins geloggt, und die dazugehörige zeit.

dann suchen:


// Login
if ($_POST['checkid'] == 'Login' && $_POST['nickname'] && $_POST['passwort']) {ersetzen mit:


// Login
if ($_POST['checkid'] == 'Login' && $_POST['nickname'] && $_POST['passwort']) {

$f_check = mysql_fetch_array(db_query('SELECT k.f_logins,k.f_time FROM '.$db_prefix.'_kontodaten k

LEFT join '.$db_prefix.'_userdaten u ON u.uid=k.uid WHERE u.nickname="'.addslashes($_POST['nickname']).'"

LIMIT 1'));
if($f_check['f_logins']>2 && $f_check['f_time']>(time()-600)){
$_GET['content'] = '/error/kein_zutrit';
}else{
if($f_check['f_logins']>2){
db_query('UPDATE '.$db_prefix.'_kontodaten k, vms_userdaten u SET k.f_logins=0 WHERE

u.nickname="'.addslashes($_POST['nickname']).'" AND k.uid=u.uid ');
}kontne ich selber noch nicht testen, wäre nett, wenn das mal jemand macht und sein ergebnis hier postet :thumb:

funktionsweise:

nach 3 maliger falscher eingabe des passworts zu einem vorhandenen usernamen kann man sich unter dem namen 10 minuten lang nicht mehr einloggen, egal ob richtiges passwort oder falsches.

Hardy
10.07.2008, 21:21
Super!
Eignet sich besonders um BF Attacken zu erschweren!
Werde ich leider erst am we testen können da ich momentan nur übern laptop online gehe.Aber einbauen auf jedenfall! Wäre eigentlich ein absolutes muss

Aber eventuell noch die ip mitloggen bei falschen einlog versuch

halk
10.07.2008, 23:09
Hallo

Supi:thumb:
ich habe es bei mir jetzt drin ,scheint super zu funzen (jedenfalls kann ich mich nicht mehr anmelden :thumb: GG. Muss jetzt warten

aber jetzt fehlt da noch was und zwar ein hinweis damit auch jeder sehen kann was los ist zum Beispiel ein hinweis per mail oder so.

Mfg halk

Xenon
10.07.2008, 23:16
Mach einfach nach dem user sich nicht einloggen können in dem teil session einfach per js dieses aufspriges script fenster oder du leitest den suer um so wie z.b. auf die seite da wo user keinen zutritt haben :thumb:

halk
10.07.2008, 23:46
Hallo


Danke habe mir jetzt zwei Datein geschrieben einmal mit hinweis und einmal das er gesperrt ist.

ein kleiner Schreibfehler ist noch vorhanden ist aber nicht schimm:thumb:


$_GET['content'] = '/error/kein_zutrit';

Lokutos
10.07.2008, 23:49
rechjtschreibefehler im zweiten code steht


$_GET['content'] = '/error/kein_zutrit';müsste

$_GET['content'] = '/error/kein_zutritt';sein

aber ich würde eine neue datei anlegen
mit dem inhalt

Datei in den ordner content/error/
mit dem namen falscher_login.php


<?head("Zutritt verweigert");?>
Der Zutritt zu diesem Bereich wurde Dir verweigert!<br>
Es wurde 3 mal ein falsches Passwort eingegeben, <br>
dadurch wurde dein Account bei uns gesperrt!<br>
Dies dient zur Sicherheit!!<br>
bitte warte eine kurze zeit der Account,<br>
wird automatisch wieder freigeschaltet
<?foot();?>
und dan folgenden code verwenden


// Login
if ($_POST['checkid'] == 'Login' && $_POST['nickname'] && $_POST['passwort']) {

$f_check = mysql_fetch_array(db_query('SELECT k.f_logins,k.f_time FROM '.$db_prefix.'_kontodaten k

LEFT join '.$db_prefix.'_userdaten u ON u.uid=k.uid WHERE u.nickname="'.addslashes($_POST['nickname']).'"

LIMIT 1'));
if($f_check['f_logins']>2 && $f_check['f_time']>(time()-600)){
$_GET['content'] = '/error/falscher_login';
}else{
if($f_check['f_logins']>2){
db_query('UPDATE '.$db_prefix.'_kontodaten k, vms_userdaten u SET k.f_logins=0 WHERE

u.nickname="'.addslashes($_POST['nickname']).'" AND k.uid=u.uid ');
}

darkshadow
11.07.2008, 10:40
habe folgendes Problem wenn man das Passwort nun falsch eingibt wird man zwar gesperrt und kann sich mit dem Nick nicht einloggen aber mit der Klammid kann man sich trotzdem noch einloggen.

jpwfour
11.07.2008, 11:58
ok, da die variante mit der klamm id nicht im grundscript drin ist, wurde die auch nicht bedacht...
(der tippfehler war natürlich beabsichtigt, um euch zu zeigen, dass man hier ne eigene fehlerseite reinmachen soll :yes: )

wenn du beide login möglichkeiten hast, musst du halt bei den datenbank abfragen immer ne "weiche" einbauen, also wenn der eingegebene "nickname" nur aus zahlen besteht, dann halt per uid=$_POST['nickname'], ansonsten so wie der code jetzt ist...


// Wenn es den User garnicht giebt
} else {
$_GET['content'] = '/error/kein_zutritt';
if(ctype_digit($_POST['nickname'])){
db_query('UPDATE '.$db_prefix.'_kontodaten SET f_logins=f_logins+1, f_time='.time().' WHERE uid="'.$_POST['nickname'].'"');
}else{
db_query('UPDATE '.$db_prefix.'_kontodaten k, vms_userdaten u SET k.f_logins=k.f_logins+1,

k.f_time='.time().' WHERE u.nickname="'.$_POST['nickname'].'" AND k.uid=u.uid ');
}
}

}

könnte man zwar auch noch per OR uid=... machen, und den andeern teil muss man natürlich auch noch ändern.

CeleronD
17.06.2011, 02:36
Eine Frage habe ich dazu noch. Gebe ich zb das Passwort einmal falsch ein und log mich dann mit dem richtigen Passwort ein. Dann reicht es beim nächsten mal 2x das Passwort falsch einzugeben bis man gesperrt ist. Könnte man da nicht so machen das nach einem erfolgreichen LogIn die Loginversuche wieder auf 3 zu setzen.

Masterphil
17.06.2011, 11:10
Geht einfach, täglicher Cron der das Feld nullt wenn es nicht auf 3 ist.

MfG

CeleronD
17.06.2011, 13:08
Ja das könnte man machen... schöner finde ich wenn es erst auf null gesetzt wird wird wenn der login erfolgreich war. Also muss es dann in die Login mit rein oder?

jo18nny
17.06.2011, 13:40
Genau
füge in der session.lib unter

// Wenn beim User alles O.K. ist!
if ($login_check['status'] == 1 ) {
das ein :

if($f_check['f_logins']==1 || $f_check['f_logins']==2){
db_query('UPDATE '.$db_prefix.'_kontodaten k, '.$db_prefix.'_userdaten u SET k.f_logins=0
WHERE u.nickname="'.$_POST['nickname'].'" AND k.uid=u.uid ');
}

CeleronD
17.06.2011, 13:58
Danke schön.