Addon:Nach 3 erfolglosen Loginversuchen Sperre für XX Sekunden

Aus VMS1 Tutorial

Wechseln zu: Navigation, Suche
Brute-Force Login Sperre
Zielgruppe Fortgeschrittene
Aufwand 5 Minuten
Änderungen an:
Datenbank Ja
vorhandenen Dateien Ja
neue Dateien Nein

Die hier beschriebenen Änderungen am Login System Deaktivieren die Loginmöglichkeit nach dreimaliger Eingabe eines falschen Passworts für 10 Minuten.

Datenbank

ALTER TABLE `vms_kontodaten` ADD `f_logins` TINYINT( 2 ) NOT NULL DEFAULT '0', ADD `f_time` INT( 11 ) NOT NULL ;

Änderungen an Dateien

lib/session.lib.php

Suche:

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

ersetze mit:

// Wenn es den User gar nicht gibt
} <|>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_zutritt';
  }<|>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 ');
    }

Unter:

// Wenn beim User alles O.K. ist!
<|>if|> ($login_check['status'] == 1 ) {

das einfügen:

<|>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 ');
}

damit nach einem erfolgreichen Login die Anzahl der Versuche auf 3 zurückgesetzt wird.

Persönliche Werkzeuge