Contrôle qualité mot de passe pour mise à jour windows active directory via ldap

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 559 fois - Téléchargée 17 fois


Contenu du snippet

La création d'un utilisateur dans Active Directory Win2k3 via LDAP nécessite un mot de passe dont la qualité doit répondre à la stratégie du serveur

Source / Exemple :


function ControlComplexity($password) {

              $Password = (string) $Password;

             // Si la chaîne $Password est inférieur à 7 on retourne FALSE
             if (strlen($Password) < 7) return FALSE;

             // On supprime les accents de la chaîne $Password
             $Password = strtr($Password, 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ', 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn');
         
             // On initialise le compteur catégorie de caractères
             $iReturn = 0;
             // Détection minuscules
             if (preg_match('`:lower:`', $Password) === 1) $iReturn++;
             // Détection majuscules
             if (preg_match('`:upper:`', $Password) === 1) $iReturn++;
             // Détection chiffres
             if (preg_match('`:digit:`', $Password) === 1) $iReturn++;
             // Détection caractères spéciaux
             if (preg_match('`[^a-zA-Z0-9]`', $Password) === 1) $iReturn++;

             if ($iReturn < 3) return FALSE;
             else return TRUE;

        }

A voir également

Ajouter un commentaire Commentaires
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
faire un controle de type au debut. Et si on passe un objet, la methode __toString est alors utilisee.
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020

Audalys, j'ai donc repris ton code que je viens de tester.

une petite question : intérêt de l'instruction : $Password = (string) $Password; ?
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020

merci à Audalys pour son apport et l'optimisation du code que je vais donc modifier en conséquence.

coucou747, ta remarque est pertinente mais je me suis placé dans le contexte de la stratégie de mot de passe d'Active Directory qui est d'origine américaine. Cette stratégie ne tient pas compte des accents si chers à nous français. Donc Password ou Pàssword est pour eux le même mot de passe. Il ne reste donc que 4 catégories, le mot de passe devant utiliser a minima 3 catégories sur 4.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
un accent contribue a avoir un mot de passe fort.

la, si tu regardes bien ta variable $count, tu peux avoir : _A5 et pour toi, ca sera un password fort...

un password est fort si il est :
- sans cycles
- avec un jeu de caractere etendus (accents, caracteres speciaux, majuscule, minuscule, chiffres)
- long
- n'est pas dans un dictionnaier (c'est plus dur a regarder.)

sur cette source : http://www.javascriptfr.com/codes/PASSWORD_32047.aspx je n'ai pas verifie si le jeux de caractere utilise etait etendu, mais c'est deja un bon debut.
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Salut,

Pourquoi utiliser une boucle alors que c'est inutile ? Tu passes la fonction "preg_match" sur ta chaîne et le tour est joué =)

<?php

function ControlComplexity($sPassword) {

$sPassword = (string) $sPassword;

// Si la chaîne $sPassword est inférieur à 7 on retourne FALSE.
if (strlen($sPassword) < 7) return FALSE;

// On supprime les accents de la chaîne $sPassword.
$sPassword = strtr($sPassword, 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ', 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn');

// On initialise le compteur $iReturn.
$iReturn = 0;

// On exécute nos tests.
if (preg_match('`[[:lower:]]`', $sPassword) === 1) $iReturn++;
if (preg_match('`[[:upper:]]`', $sPassword) === 1) $iReturn++;
if (preg_match('`[[:digit:]]`', $sPassword) === 1) $iReturn++;
if (preg_match('`[^a-zA-Z0-9]`', $sPassword) === 1) $iReturn++;

if ($iReturn < 2) return FALSE;

return TRUE;

}

?>
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.