Nombre de tentative de connexion

Décrivez les améliorations que vous souhaiteriez pour les prochaines versions.
Répondre
Avatar du membre
ProServ
Gsup LEVEL 3
Messages : 75
Enregistré le : sam. 30 nov. 2019 12:33
Contact :

Le paramètre "Les utilisateurs sont désactivés après plusieurs tentatives de connexion infructueuses" ne fonctionne pas.
J'ai renseigné 10 tentatives.

Voici ce qui est dans la BDD :

Code : Tout sélectionner

user_disable_attempt		int(1)		1
user_disable_attempt_number	int(2)		10

J'ai essayé sur un utilisateur interne ou un utilisateur LDAP, idem, pas de blocage.

Le message est :

Code : Tout sélectionner

Erreur: Votre nom d'utilisateur ou mot de passe, n'est pas correct. 
Même lorsqu'il sagit d'un utilisateur inexistant alors que d'après login.php il y a un message pour les utilisateurs inexistant :
OS : Linux Hébergement o2switch | MariaDB : 10.2.30 | PHP : 7.4.2 | GestSup : 3.2.18
Avatar du membre
Flox
Administrateur du site
Messages : 8973
Enregistré le : jeu. 21 juin 2012 19:00

Bonjour,

pouvez-vous préciser votre version et reproduire le problème sur la webdemo sur un nouvel utilisateur de test.

Cdt
GestSup: 3.2.47 | Debian: 12 | Apache: 2.4.58 | MariaDB: 11.3.2 | PHP: 8.3.4 | https://doc.gestsup.fr/
Avatar du membre
ProServ
Gsup LEVEL 3
Messages : 75
Enregistré le : sam. 30 nov. 2019 12:33
Contact :

Les conditions sont les suivantes :

Code : Tout sélectionner

if($find_login) {
...
     Première condition : Si l'utilisateur est trouve ?
...
} elseif(($rparameters['ldap'])=='1' && ($rparameters['ldap_auth']=='1')) {
...
     Deuxième condition : Si utilisateur non trouvé et le connecteur et l'authentification LDAP sont activé
...
} else {
...
     Troisième condition : Là se trouve les conditions du nombre de tentative de connexion ($rparameters['user_disable_attempt'])
...
}
Du coup ca se comprend mieux.

La condition du $rparameters['user_disable_attempt'] (dans le dernier else) n'est pas exécuté si l'utilisateur est trouvé ????
Ou sinon je n'est pas compris la variable $find_login...

Il faudrait peut être rajouter les conditions suivantes dans la première condition :

Code : Tout sélectionner

if($rparameters['user_disable_attempt']) {
	//check if user exist
	$qry=$db->prepare("SELECT `id`,`auth_attempt`,`disable` FROM `tusers` WHERE login=:login");
	$qry->execute(array('login' => $_POST['login']));
	$row=$qry->fetch();
	$qry->closeCursor();
	if($row) {
		$attempt=$row['auth_attempt']+1;
		$qry=$db->prepare("UPDATE `tusers` SET `auth_attempt`=:auth_attempt WHERE `id`=:id");
		$qry->execute(array('auth_attempt' => $attempt,'id' => $row['id']));
		$attempt_remaing=$rparameters['user_disable_attempt_number']-$attempt;
		if($attempt_remaing>0) {
			$attempt_remaing=T_('Il reste').' '.$attempt_remaing.' '.T_('tentatives avant la désactivation de votre compte');
		} else {
			if($row['disable']) {
				$attempt_remaing=T_('Votre compte est désactivé, contacter votre administrateur');
			} else {
				$qry=$db->prepare("UPDATE `tusers` SET `disable`=1 WHERE `id`=:id");
				$qry->execute(array('id' => $row['id']));
				$attempt_remaing=T_('Votre compte a été désactivé, suite à').' '.$rparameters['user_disable_attempt_number'].' '.T_('tentatives de connexion infructueuses');
			}
		}
	} else {$attempt_remaing='';}
} else {$attempt_remaing='';}
OS : Linux Hébergement o2switch | MariaDB : 10.2.30 | PHP : 7.4.2 | GestSup : 3.2.18
Avatar du membre
Flox
Administrateur du site
Messages : 8973
Enregistré le : jeu. 21 juin 2012 19:00

Bonjour,

effectivement le paramètre est incompatible avec la synchronisation LDAP, car si l'utilisateur est désactivé après plusieurs tentatives infructueuses, il serait réactivé par lors de la prochaine synchronisation LDAP.

Cdt
GestSup: 3.2.47 | Debian: 12 | Apache: 2.4.58 | MariaDB: 11.3.2 | PHP: 8.3.4 | https://doc.gestsup.fr/
Avatar du membre
ProServ
Gsup LEVEL 3
Messages : 75
Enregistré le : sam. 30 nov. 2019 12:33
Contact :

Je suis en version 3.1.44

J'ai effectué un test sur la base de test. Je ne rencontre pas ce problème parce que la connexion LDAP n'est pas activée.

Peut-on dans ce cas rajouter une condition = si utilisateur n'est pas dans la base... en plus des conditions suivantes :

Code : Tout sélectionner

elseif(($rparameters['ldap'])=='1' && ($rparameters['ldap_auth']=='1'))
OS : Linux Hébergement o2switch | MariaDB : 10.2.30 | PHP : 7.4.2 | GestSup : 3.2.18
Avatar du membre
ProServ
Gsup LEVEL 3
Messages : 75
Enregistré le : sam. 30 nov. 2019 12:33
Contact :

De plus il manque une condition dans (($rparameters['ldap'])=='1' && ($rparameters['ldap_auth']=='1')).

En effet, lorsqu'il s'agit d'un utilisateur désactivé (ldap ou non), le message d'erreur est toujours le même

Code : Tout sélectionner

Erreur : Votre nom d'utilisateur ou mot de passe, n'est pas correct. 
alors qu'il devrait être :

Code : Tout sélectionner

Utilisateur désactivé
OS : Linux Hébergement o2switch | MariaDB : 10.2.30 | PHP : 7.4.2 | GestSup : 3.2.18
Avatar du membre
Flox
Administrateur du site
Messages : 8973
Enregistré le : jeu. 21 juin 2012 19:00

Bonjour,

Le message d'erreur est volontairement flou afin de ne pas donner trop d'informations.

Je déplace votre demande dans la section update.

Cdt
GestSup: 3.2.47 | Debian: 12 | Apache: 2.4.58 | MariaDB: 11.3.2 | PHP: 8.3.4 | https://doc.gestsup.fr/
Avatar du membre
ProServ
Gsup LEVEL 3
Messages : 75
Enregistré le : sam. 30 nov. 2019 12:33
Contact :

Bon après plusieurs tests...

J'ai rajouté une condition si l'utilisateur est dans la BDD.

Code : Tout sélectionner

while ($row = $qry->fetch()) 
{
	//uppercase login converter to compare
	$login=strtoupper($login);
	$db_login=strtoupper($row['login']);

	if ($db_login == $login) {
		$user_exist_to_db = 1;
	}
Et ai rajouté la condition dans la connexion LDAP

Code : Tout sélectionner

elseif(($rparameters['ldap'])=='1' && ($rparameters['ldap_auth']=='1') && $user_exist_to_db != 1)
La ca fonctionne bien, l'utilisateur passe en désactivé si xx tentative... Mais comme vous le dites, lors de la syncro LDAP, l’utilisateur repasse en actif.

Il faudrait rajouter une condition dans la syncro LDAP non ? Si utilisateur désactivé sur xx tentative, ne pas le réactivé...
OS : Linux Hébergement o2switch | MariaDB : 10.2.30 | PHP : 7.4.2 | GestSup : 3.2.18
Répondre