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 :
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é...