From 600426da614a173e118aba2fe62d5499470fcce0 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Mon, 1 Jun 2020 09:34:13 +0200 Subject: [PATCH] 10.2.dev20 Liste noire --- core/core.php | 2 +- core/module/config/config.php | 4 ++-- core/module/config/view/index/index.php | 29 ++++++++++++++++++------- core/module/user/user.php | 27 +++++++++++++++-------- core/module/user/view/login/login.php | 4 +++- 5 files changed, 45 insertions(+), 21 deletions(-) diff --git a/core/core.php b/core/core.php index 889798b5..65eb3d92 100755 --- a/core/core.php +++ b/core/core.php @@ -39,7 +39,7 @@ class common { const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '10.2.00.dev19'; + const ZWII_VERSION = '10.2.00.dev20'; const ZWII_UPDATE_CHANNEL = "v10"; public static $actions = []; diff --git a/core/module/config/config.php b/core/module/config/config.php index d7bc9440..6cd5a98d 100755 --- a/core/module/config/config.php +++ b/core/module/config/config.php @@ -656,7 +656,7 @@ class config extends common { $d = $this->getData(['blacklist']); $data = ''; foreach ($d as $key => $item) { - $data .= $key . ';' . $item['ip'] . PHP_EOL; + $data .= strftime('%d/%m/%y',$item['time']) . ';' . strftime('%R',$item['time']) . ';' . $key . ';' . $item['ip'] . PHP_EOL; } $fileName = self::TEMP_DIR . 'blacklist.log'; file_put_contents($fileName,$data); @@ -668,7 +668,7 @@ class config extends common { $this->addOutput([ 'display' => self::DISPLAY_RAW ]); - unlink(self::TEMP_DIR . 'blacklist.tmp'); + unlink(self::TEMP_DIR . 'blacklist.log'); // Valeurs en sortie $this->addOutput([ 'title' => 'Configuration', diff --git a/core/module/config/view/index/index.php b/core/module/config/view/index/index.php index 71b4b69f..1142b85f 100755 --- a/core/module/config/view/index/index.php +++ b/core/module/config/view/index/index.php @@ -350,24 +350,30 @@
-

Sécurité

+

Sécurité de la connexion

'Tentatives de logins', + 'label' => 'Connexions successives', 'selected' => $this->getData(['config', 'connect', 'attempt']) ]); ?>
'Durée du blocage', + 'label' => 'Blocage après échecs', 'selected' => $this->getData(['config', 'connect', 'timeout']) ]); ?>
+ helper::baseUrl() . 'config/blacklistDownload', - 'value' => 'IP liste noire', + 'value' => 'Télécharger liste noire', 'ico' => 'download' ]); ?>
@@ -375,11 +381,18 @@ 'buttonRed', 'href' => helper::baseUrl() . 'config/blacklistReset', - 'value' => 'Réinitialisation liste', + 'value' => 'Réinitialiser liste', 'ico' => 'cancel' ]); ?>
+
+
+ +
+
+
+

Journalisation

helper::baseUrl() . 'config/logDownload', - 'value' => 'Téléchargement du journal', + 'value' => 'Télécharger journal', 'ico' => 'download' ]); ?>
@@ -397,7 +410,7 @@ 'buttonRed', 'href' => helper::baseUrl() . 'config/logReset', - 'value' => 'Réinitialisation du journal', + 'value' => 'Réinitialiser journal', 'ico' => 'cancel' ]); ?>
@@ -418,7 +431,7 @@ 'value' => $this->getData(['config', 'analyticsId']) ]); ?>
-
+
helper::baseUrl() . 'config/script/head', 'value' => 'Script dans head', diff --git a/core/module/user/user.php b/core/module/user/user.php index 1efaf287..133b1940 100755 --- a/core/module/user/user.php +++ b/core/module/user/user.php @@ -332,20 +332,28 @@ class user extends common { // Soumission du formulaire if($this->isPost()) { $userId = $this->getInput('userLoginId', helper::FILTER_ID, true); - // le userId n'existe pas, créer une entré dans la liste noire + + // le userId n'existe pas, créer une entrée dans la liste noire if( !$this->getData(['user', $userId])) { //Stockage de l'IP $this->setData([ 'blacklist', $userId, [ + 'time' => time(), 'ip' => $_SERVER['REMOTE_ADDR'], 'connectFail' => $this->getData(['blacklist',$userId,'connectFail']) ? $this->getData(['blacklist',$userId,'connectFail']) + 1 : 1 ] ]); + $notification = 'Identifiant ou mot de passe incorrect'; } - // Contrôle du timeout pas de vérification du mot de passe si le temps est dépassé. - // Connexion si les informations sont correctes + + /** + * Compte valide : + * Timeout entre nombre de tentatives autorisées + * Mot de passe + * Groupe + */ if( $this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time() && $this->getData(['user',$userId,'connectFail']) < $this->getData(['config', 'connect', 'attempt']) && password_verify($this->getInput('userLoginPassword', helper::FILTER_STRING_SHORT, true), $this->getData(['user', $userId, 'password'])) @@ -381,10 +389,12 @@ class user extends common { // Sinon notification d'échec else { // L'utilisateur existe : incrémenter le compteur d'échec de connexion - if ( is_array($this->getdata(['user',$userId])) ) { + if ( is_array($this->getdata(['user',$userId])) + ) { $this->setData(['user',$userId,'connectFail',$this->getdata(['user',$userId,'connectFail']) + 1 ]); // Mettre à jour le timer et notifier - if ( $this->getdata(['user',$userId,'connectFail']) > $this->getData(['config', 'connect', 'attempt'])) { + if ( $this->getdata(['user',$userId,'connectFail']) > $this->getData(['config', 'connect', 'attempt']) + ) { $notification = 'Trop de tentatives, accès bloqué durant ' . ($this->getData(['config', 'connect', 'timeout']) / 60) . ' minutes.'; // Ne pas incrémenter le timer si actif if ($this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time() ) { @@ -393,15 +403,14 @@ class user extends common { } else { $notification = 'Identifiant ou mot de passe incorrect'; } - // L'utilisateur n'existe pas - // Bloquer l'IP après les tentatives autorisées, + // L'utilisateur n'existe pas + // Bloquer l'IP après les tentatives autorisées avec ce compte, } elseif ( $this->getData(['blacklist',$userId,'connectFail']) > $this->getData(['config', 'connect', 'attempt']) || array_search($_SERVER['REMOTE_ADDR'],helper::arrayCollumn($this->getData(['blacklist']), 'ip')) ) { - $notification = 'Trop de tentatives, accès bloqué durant ' . ($this->getData(['config', 'connect', 'timeout']) / 60) . ' minutes.'; + $notification = 'Trop de tentatives, compte verrouillé'; } - // Journalisation $dataLog = strftime('%d/%m/%y',time()) . ';' . strftime('%R',time()) . ';' ; $dataLog .= $_SERVER['REMOTE_ADDR'] . ';' ; diff --git a/core/module/user/view/login/login.php b/core/module/user/view/login/login.php index ac65009c..a25c0529 100755 --- a/core/module/user/view/login/login.php +++ b/core/module/user/view/login/login.php @@ -13,7 +13,9 @@
- + 'La session est close à la fermeture du navigateur.' + ]); ?>