Page 1 sur 1

Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 11:46
par ProServ
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 :

Re: Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 11:54
par Flox
Bonjour,

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

Cdt

Re: Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 11:58
par ProServ
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='';}

Re: Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 12:22
par Flox
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

Re: Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 12:25
par ProServ
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'))

Re: Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 12:36
par ProServ
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é

Re: Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 12:41
par Flox
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

Re: Nombre de tentative de connexion

Posté : mar. 3 déc. 2019 12:58
par ProServ
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é...