ciao macus. Ben ritrovato.
Allora documentandomi un pò sulla sicurezza ho appreso che il metodo di bloccare un malintenzionato con il suo IP e timestamp da DB non è un metodo sicuro visto che è possibile cambiare IP nel corso di una sessione.
Ho visto invece che implementare il Lock out mediante sessioni potrebbe essere piu efficace.
PHP:
<?php
/**
*
*/
class Brute
{
const LOCK_TRIES = 3;
const LOCK_TIME = 10;
public static function startLockOut()
{
$_SESSION['lock-time'] = date('Y-m-d H:i:s');
}
public static function endLockOut()
{
if (!empty($_SESSION['lock-time'])) {
unset($_SESSION['lock-time']);
}
if (!empty($_SESSION['lock-tries'])) {
unset($_SESSION['lock-tries']);
}
}
public static function checkLockOutTime()
{
if (isset($_SESSION['lock-time'])) {
$current_time = new DateTime(date('Y-m-d H:i:s'));
$wait_time = new DateTime($_SESSION['lock-time']);
$wait_time->modify('+' . self::LOCK_TIME . ' minutes');
if ($current_time > $wait_time) {
self::endLockOut();
return true;
}else {
return false;
}
}
return true;
}
public static function checkLockOutTries()
{
if (empty($_SESSION['lock-tries'])) {
$_SESSION['lock-tries'] = 1;
} else {
$_SESSION['lock-tries'] += 1;
}
if ($_SESSION['lock-tries'] > self::LOCK_TRIES) {
self::startLockOut();
return false;
} else {
return true;
}
}
}
le due funzioni checkLockOutTime() e checkLockOutTries() verranno richiamate in due variabili nella pagina di controllo login, se risulteranno true insieme al controllo di username e password, ok.... se risulteranno false bloccheranno per 3 tentativi e si sblocchera dopo 10 minuti e il display nella pagina di login sarà
PHP:
$tries = empty($_SESSION['lock-tries']) ? null : $_SESSION['lock-tries'];
$time = empty($_SESSION['lock-time']) ? null : $_SESSION['lock-time'];
$message = "User or Password Wrong ";
$message2 = "Lock tries: $tries | lock time: $time";
}
se al terzo tentativo le credenziali sono tutte vere entrerà e se poi schiaccerò logout, nella classe Session alla funzione logout faccio unset di $_SESSION[look-tries]
funziona !!!
Che ne pensi??