Moin!
http://panopticlick.eff.org/index.php?action=log&js=yes
und <?php phpinfo(); ?>
geben Dir Antworten genug.
Insbesondere:
$_SERVER["HTTP_USER_AGENT"]
$_SERVER['HTTP_ACCEPT']
$_SERVER['HTTP_ACCEPT_LANGUAGE']
$_SERVER['HTTP_ACCEPT_ENCODING']
$_SERVER['HTTP_ACCEPT_CHARSET']
$_SERVER['REMOTE_ADDR']
könnten Dein Interesse finden.
VORSCHLAG: Logge einfach die 50 letzten Anmeldeversuche mit falschen Passwort
<?php
function loggeAnmeldungSperreAus($bolAnmeldungErfolgreich) {
## $bolAnmeldungErfolgreich enthalte true bei erfolgreicher Anmeldung, sonst false
$strBrowserEigenschaften=md5(
$_SERVER['HTTP_USER_AGENT']
. $_SERVER['HTTP_ACCEPT']
. $_SERVER['HTTP_ACCEPT_LANGUAGE']
. $_SERVER['HTTP_ACCEPT_ENCODING']
. $_SERVER['HTTP_ACCEPT_CHARSET']
);
$arZeilen = file('./logs/falscheAnmeldungen');
if ($bolAnmeldungErfolgreich) {
## Ausfiltern der IP
foreach ($arZeilen as $strZeile) {
$strZeile = trim($strZeile); # da klebt manchmal ein Zeilendezeichen...
listen ($md5, $ip) = explode(';',$strZeile)
if ($ip != $_SERVER['REMOTE_ADDR']) {
$arZeilen_neu[] = strZeile;
}
}
file_put_contents('./logs/falscheAnmeldungen', implode('\n';$arZeilenNeu));
} else {
## Anmeldung wahr falsch. Zählen, ob schon zwei falsche Anmeldungen gab, wenn ja, dann sperren
counter = 0;
foreach ($arZeilen as strZeile) {
$strZeile = trim($strZeile); # da klebt manchmal ein Zeilendezeichen...
listen ($md5, $ip) = explode(';',$strZeile);
if ($ip == $_SERVER['REMOTE_ADDR'] && $md5 == $strBrowserEigenschaften) {
$counter ++;
if (2 == $counter) {
## sperren:
$htaccess = file_get_contents('./../.htaccess');
$htaccess .= "\n".'Deny from '.$_SERVER['REMOTE_ADDR'];
file_put_contents('./../.htaccess', $htaccess);
header('Error: 403');
print '<h1>403: Forbidden</h1>' ;
exit; ## Du kannst hier abbrechen. Die beiden Einträge werden irgendwann von selbst verschwinden
} # endIf
} # endIf
} #endForeach
## Hinzufügen:
array_push($arZeilen, $strBrowserEigenschaften.';'.$_SERVER['REMOTE_ADDR']);
## Auf 50 kürzen, dass sollte allerdings nur einmal stattfinden
reset($arZeilen);
if (while 50 < count($arZeilen)) {
array_shift($arZeilen);
} #endIf
## schreiben:
file_put_contents('./logs/falscheAnmeldungen', implode('\n';$arZeilen));
} #endIf
return true;
} #endFunction
?>
Hinweise:
- Um Dich selbst frei zu geben musst Du Deine IP kennen und die Datei .htaccess via ftp oder ssh bearbeiten, Deine IP da raus löschen.
- wenn in letzten 50 Anmeldeversuchen mit der selben Browserkennung und IP bereits zwei Anmeldeversuche falsch waren wird die IP gesperrt, der ganze Webauftritt oder das Verzeichnis ist von dieser IP aus nicht mehr erreichbar.
-- der Code ist ungetestet und beinhaltet sehr wahrscheinlich noch Fehler. Es ist ein Vorschlag.
-- triviale Funktionen sind nicht erläutert, schlage diese bei www.php.net nach.
-- Auf jegliche Fehlervorsorge (isset(), file_exists, is_readable) wurde verzichtet.
-- Die Parametrisierung (Anzahl Anmeldeversuche (3), Anzahl Zeilen in Logfile(50), Ort von .htaccess und des Logfiles) überlasse ich auch Dir
-- ich habe das absichtlich als Funktion geschrieben :)
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix