Bugfix sul controllo brute-force
This commit is contained in:
parent
c7e88bcf5e
commit
10da3933ca
|
@ -38,6 +38,8 @@ class Auth extends \Util\Singleton
|
||||||
'attemps' => 3,
|
'attemps' => 3,
|
||||||
'timeout' => 180,
|
'timeout' => 180,
|
||||||
];
|
];
|
||||||
|
/** @var bool Informazioni riguardanti la condizione brute-force */
|
||||||
|
protected static $is_brute;
|
||||||
|
|
||||||
/** @var array Informazioni riguardanti l'utente autenticato */
|
/** @var array Informazioni riguardanti l'utente autenticato */
|
||||||
protected $infos;
|
protected $infos;
|
||||||
|
@ -161,7 +163,7 @@ class Auth extends \Util\Singleton
|
||||||
// Controllo in automatico per futuri cambiamenti dell'algoritmo di password
|
// Controllo in automatico per futuri cambiamenti dell'algoritmo di password
|
||||||
if ($rehash) {
|
if ($rehash) {
|
||||||
$database = Database::getConnection();
|
$database = Database::getConnection();
|
||||||
$database->update('zz_users', ['password' => self::hashPassword($password)], ['id_utente' => $user_id]);
|
$database->update('zz_users', ['password' => self::hashPassword($password)], ['id' => $user_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
@ -195,7 +197,7 @@ class Auth extends \Util\Singleton
|
||||||
$database = Database::getConnection();
|
$database = Database::getConnection();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$results = $database->fetchArray('SELECT id AS id_utente, idanagrafica, username, (SELECT nome FROM zz_groups WHERE id=idgruppo) AS gruppo FROM zz_users WHERE id = '.prepare($user_id).' AND enabled = 1 LIMIT 1', false, ['session' => false]);
|
$results = $database->fetchArray('SELECT id AS id_utente, idanagrafica, username, (SELECT nome FROM zz_groups WHERE zz_groups.id=zz_users.idgruppo) AS gruppo FROM zz_users WHERE id = '.prepare($user_id).' AND enabled = 1 LIMIT 1', false, ['session' => false]);
|
||||||
|
|
||||||
if (!empty($results)) {
|
if (!empty($results)) {
|
||||||
$results[0]['is_admin'] = ($results[0]['gruppo'] == 'Amministratori');
|
$results[0]['is_admin'] = ($results[0]['gruppo'] == 'Amministratori');
|
||||||
|
@ -361,7 +363,7 @@ class Auth extends \Util\Singleton
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controlla se sono in corso molti tentativi di accesso (possibile brute-forcing).
|
* Controlla se sono in corso molti tentativi di accesso (possibile brute-forcing in corso).
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
@ -369,18 +371,29 @@ class Auth extends \Util\Singleton
|
||||||
{
|
{
|
||||||
$database = Database::getConnection();
|
$database = Database::getConnection();
|
||||||
|
|
||||||
$results = $database->fetchArray('SELECT COUNT(*) AS tot FROM zz_logs WHERE ip = '.prepare(get_client_ip()).' AND stato = '.prepare(self::getStatus()['failed']['code']).' AND DATE_ADD(created_at, INTERVAL '.self::$brute['timeout'].' SECOND) >= NOW()');
|
if ($database->isInstalled()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return $results[0]['tot'] > self::$brute['attemps'];
|
if (!isset(self::$is_brute)) {
|
||||||
|
$results = $database->fetchArray('SELECT COUNT(*) AS tot FROM zz_logs WHERE ip = '.prepare(get_client_ip()).' AND stato = '.prepare(self::getStatus()['failed']['code']).' AND DATE_ADD(created_at, INTERVAL '.self::$brute['timeout'].' SECOND) >= NOW()');
|
||||||
|
self::$is_brute = $results[0]['tot'] > self::$brute['attemps'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$is_brute;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restituisce il tempo di attesa rimanente per lo sblocco automatico dellla protezione contro attacchi brute-forc.
|
* Restituisce il tempo di attesa rimanente per lo sblocco automatico dellla protezione contro attacchi brute-force.
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public static function getBruteTimeout()
|
public static function getBruteTimeout()
|
||||||
{
|
{
|
||||||
|
if (self::isBrute()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
$database = Database::getConnection();
|
$database = Database::getConnection();
|
||||||
|
|
||||||
$results = $database->fetchArray('SELECT TIME_TO_SEC(TIMEDIFF(DATE_ADD(created_at, INTERVAL '.self::$brute['timeout'].' SECOND), NOW())) AS diff FROM zz_logs WHERE ip = '.prepare(get_client_ip()).' AND stato = '.prepare(self::getStatus()['failed']['code']).' AND DATE_ADD(created_at, INTERVAL '.self::$brute['timeout'].' SECOND) >= NOW() ORDER BY created_at DESC LIMIT 1');
|
$results = $database->fetchArray('SELECT TIME_TO_SEC(TIMEDIFF(DATE_ADD(created_at, INTERVAL '.self::$brute['timeout'].' SECOND), NOW())) AS diff FROM zz_logs WHERE ip = '.prepare(get_client_ip()).' AND stato = '.prepare(self::getStatus()['failed']['code']).' AND DATE_ADD(created_at, INTERVAL '.self::$brute['timeout'].' SECOND) >= NOW() ORDER BY created_at DESC LIMIT 1');
|
||||||
|
|
|
@ -133,7 +133,7 @@ function get_permessi($nome_modulo)
|
||||||
trigger_error(_('Funzione deprecata!'), E_USER_DEPRECATED);
|
trigger_error(_('Funzione deprecata!'), E_USER_DEPRECATED);
|
||||||
|
|
||||||
$dbo = \Database::getConnection();
|
$dbo = \Database::getConnection();
|
||||||
$query = 'SELECT *, (SELECT idanagrafica FROM zz_users WHERE id_utente='.prepare($_SESSION['id_utente']).') AS idanagrafica FROM zz_permissions WHERE idgruppo=(SELECT idgruppo FROM zz_users WHERE id_utente='.prepare($_SESSION['id_utente']).') AND idmodule=(SELECT id FROM zz_modules WHERE name='.prepare($nome_modulo).')';
|
$query = 'SELECT *, (SELECT idanagrafica FROM zz_users WHERE id='.prepare($_SESSION['id_utente']).') AS idanagrafica FROM zz_permissions WHERE idgruppo=(SELECT idgruppo FROM zz_users WHERE id='.prepare($_SESSION['id_utente']).') AND idmodule=(SELECT id FROM zz_modules WHERE name='.prepare($nome_modulo).')';
|
||||||
$rs = $dbo->fetchArray($query);
|
$rs = $dbo->fetchArray($query);
|
||||||
if (count($rs) <= 0) {
|
if (count($rs) <= 0) {
|
||||||
// Ultimo tentativo: se non ci sono i permessi ma sono l'amministratore posso comunque leggere il modulo
|
// Ultimo tentativo: se non ci sono i permessi ma sono l'amministratore posso comunque leggere il modulo
|
||||||
|
|
Loading…
Reference in New Issue