IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier un mot de passe sans ordre


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Par défaut Vérifier un mot de passe sans ordre
    Bonjour, je souhaite vérifier qu'une chaîne ai bien au minimum:

    - une lettre en majuscule
    - une lettre en minuscule
    - un caractères spécial
    - un chiffre

    et que le tout fasse minimum 8 caractères.

    j'ai commencé par faire ça:

    je n'ai pas mis le motif pour les 8 caractères minimum pour le moment.

    Le truc qui me pose problème c'est que apparemment l'ordre compte ! C'est a dire qu'il va chercher un mot de passe avec EN PREMIER au moins un chiffre EN DEUXIÈME au moins une minuscule EN TROISIEME au moins une majuscule etc.. alors que je souhaiterai que mon expression régulière valide un mot de passe sans ce soucié de l'ordre dans lequel sont entrer les caractères.

    je test mes expressions sur : http://www.quanetic.com/Regex

    Je n'ai pas encore trouvé comment faire, je ne suis pas contre un peu d'aide, merci bcp.

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Oui, l'ordre compte, pour faire ceci je te conseilles de scinder ta regex en plusieurs sous regex :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(preg_match('#...#', $chaine) && preg_match('#...#', $chaine) && ...)
       echo 'chaine valide';
    else
       echo 'chaine invalide';

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Par défaut
    Merci de ta réponse Madfrix, mais l'expression régulière que j'attends doit être stocké dans un seul champs en BDD, et du coup je doit avoir une seule expression qui fasse tout ça.

    Le code php ( que je ne peux pas modifier ) récupére l'expression dans mysql et fait un preg_match.

    Je ne peux donc pas faire plusieurs preg_match(..), c'est vraiment pas possible de tout mettre dans une seule regex ?

    Merci.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Salut,

    Je ne te conseillerais pas de tout faire en une seule regex, car c'est vraiment lourd. Tu peux très bien stocker un array serialisé dans ta BDD, pour stocker plusieurs regex.
    Par contre je me suis quand même penché sur le problème de tout faire en une seule regex, parce que je le trouve assez intéressant.
    Le seul problème que je n'ai pas réussi à résoudre, c'est le minimum de 8 caractères. Tu pourras éventuellement le stocker dans ta BDD, mais je n'ai pas trouvé le moyen de le mettre dans la regex.

    Tu veux que la chaîne soit composée de :
    1 lettre minuscule (Min)
    1 lettre majuscule (Max)
    1 chiffre (Chif)
    1 symbole non alphanumérique (Sym)

    En permutant on obtient les (4)! = 24 possibilités suivantes :
    Min-Maj-Chif-Sym
    Min-Maj-Sym-Chif
    Min-Chif-Maj-Sym
    Min-Chif-Sym-Maj
    Min-Sym-Maj-Chif
    Min-Sym-Chif-Maj

    Maj-Min-Chif-Sym
    Maj-Min-Sym-Chif
    Maj-Chif-Min-Sym
    Maj-Chif-Sym-Min
    Maj-Sym-Chif-Min
    Maj-Sym-Min-Chif

    Chif-Min-Maj-Sym
    Chif-Min-Sym-Maj
    Chif-Maj-Min-Sym
    Chif-Maj-Sym-Min
    Chif-Sym-Min-Maj
    Chif-Sym-Maj-Min

    Sym-Min-Maj-Chif
    Sym-Min-Chif-Maj
    Sym-Maj-Min-Chif
    Sym-Maj-Chif-Sym
    Sym-Chif-Min-Maj
    Sym-Chif-Maj-Min

    En mettant tout ça dans une même regex on obtient :

    #(?:MinMajChifSym|MinMajSymChif|MinChifMajSym|MinChifSymMaj|MinSymMajChif|MinSymChifMaj|MajMinChifSym|MajMinSymChif|MajChifMinSym|MajChifSymMin|MajSymChifMin|ManSymMinChif|ChifMinMajSym|ChifMinSymMaj|ChifMajMinSym|ChifMajSymMin|ChifSymMinMaj|ChifSymMajMin|SymMinMajChif|SymMinChifMaj|SymMajMinChif|SymMajChifMin|SymChifMinMaj|SymChifMajMin)#

    Soit en remplacent les lettres par leur vrai symbole :

    #(?:[a-z]+.*[A-Z]+.*[0-9]+.*[^a-zA-Z0-9]+|[a-z]+.*[A-Z]+.*[^a-zA-Z0-9]+.*[0-9]+|[a-z]+.*[0-9]+.*[A-Z]+.*[^a-zA-Z0-9]+|[a-z]+.*[0-9]+.*[^a-zA-Z0-9]+.*[A-Z]+|[a-z]+.*[^a-zA-Z0-9]+.*[A-Z]+.*[0-9]+|[a-z]+.*[^a-zA-Z0-9]+.*[0-9]+.*[A-Z]+|[A-Z]+.*[a-z]+.*[0-9]+.*[^a-zA-Z0-9]+|[A-Z]+.*[a-z]+.*[^a-zA-Z0-9]+.*[0-9]+|[A-Z]+.*[0-9]+.*[a-z]+.*[^a-zA-Z0-9]+|[A-Z]+.*[0-9]+.*[^a-zA-Z0-9]+.*[a-z]+|[A-Z]+.*[^a-zA-Z0-9]+.*[0-9]+.*[a-z]+|[A-Z]+.*[^a-zA-Z0-9]+.*[a-z]+.*[0-9]+|[0-9]+.*[a-z]+.*[A-Z]+.*[^a-zA-Z0-9]+|[0-9]+.*[a-z]+.*[^a-zA-Z0-9]+.*[A-Z]+|[0-9]+.*[A-Z]+.*[a-z]+.*[^a-zA-Z0-9]+|[0-9]+.*[A-Z]+.*[^a-zA-Z0-9]+.*[a-z]+|[0-9]+.*[^a-zA-Z0-9]+.*[a-z]+.*[A-Z]+|[0-9]+.*[^a-zA-Z0-9]+.*[A-Z]+.*[a-z]+|[^a-zA-Z0-9]+.*[a-z]+.*[A-Z]+.*[0-9]+|[^a-zA-Z0-9]+.*[a-z]+.*[0-9]+.*[A-Z]+|[^a-zA-Z0-9]+.*[A-Z]+.*[a-z]+.*[0-9]+|[^a-zA-Z0-9]+.*[A-Z]+.*[0-9]+.*[a-z]+|[^a-zA-Z0-9]+.*[0-9]+.*[a-z]+.*[A-Z]+|[^a-zA-Z0-9]+.*[0-9]+.*[A-Z]+.*[a-z]+.*)#

    C'est une regex énorme, mais elle marche.
    Par contre, si tu peux t'organiser autrement pour tester avec plusieurs regex, fais le.

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Ce test étant le même pour tous les mots de passe, pourquoi devrait-il être stocké en BDD ?
    La seule raison valable à un stockage en base serait que ce test soit éventuellement modifiable en ligne, et je n'en vois pas l'utilité...

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Par défaut
    Merci de vos reponse, je vais voir si j'ai assez de place pour stocké ça dans ma bdd, et surtout essayé de comprendre lol
    merci sachav.

    s.n.a.f.u : pour configuré une politique de mot de passe différentes selon les clients.

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par abcdefg Voir le message
    s.n.a.f.u : pour configuré une politique de mot de passe différentes selon les clients.
    Je veux bien, mais combien de politiques différentes ?
    Et surtout, aucune qui nécessite d'être modifiée dynamiquement (par le backoffice du site), non ?

    Donc rien qui ne peux se mettre dans un fichier de configuration.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    J’avoue que d’une part je suis bien sidéré de voir que

    - personne parmi ceux qui sont assez secourables pour prendre la peine de s’intéresser à une question et essayer d’y répondre ne semble avoir la moindre idée de comment faire, alors que les assertions avant/arrière/positives/négatives sont une arme essentielle des regex

    - personne parmi les gens suffisamment au courant des regex pour pouvoir répondre correctement, et je suis sûr qu’il y en a qui ont lu cette file, n’a justement été assez charitable pour bien vouloir donner leur lumière. Ou alors c’est qu’il n’y a pas tellement de monde qui lise ce forum PHP, ou qui pratique encore PHP (j’en doute), ou alors est-ce que les pratiquants de PHP maîtrisent vraiment les outils qui sont pourtant indispensables pour les types d’applications auxquelles est destiné PHP ?.......





    D’autre part, je me permets de dire ( pour une fois) que je trouve un tantinet agaçant une certaine tendance que j’ai remarquée dans nombre de réponses, et peut être particulièrement dans le forum PHP, à savoir qu’à une question à laquelle il est apparemment difficile de trouver une réponse, il est demandé « et pourquoi tu veux faire ça ?». Sous entendu: si tu ne voulais pas faire ça, ou pas comme ça mais autrement, tu n’aurais pas ce problème insoluble. Sous-sous entendu: et nous non plus

    C’est soit avoir des outils peu efficaces à sa disposition, soit être bien défaitiste a priori.
    Pour ma part, concernant les regex, étant complétement épaté par leurs possibilités, je pars d’abord du principe “on peut tout faire avec les regex“ et je cherche, je cherche, je cherche jusqu’à ce que je trouve. Ce qui m’oblige à apprendre toujours un peu plus.








    Pendant que j’y suis, ce qui m’étonne aussi c’est que ce genre de problème a dû être posé bien souvent, il me semble l’avoir vu plusieurs fois, je crois même y avoir répondu une fois. Et donc l’utilisation de la fonctionnalité de recherche de developpez.com devrait fournir des pistes.

    De fait, en faisant une telle recherche j’ai trouvé cette file:
    http://www.developpez.net/forums/d76.../masque-passe/
    C’est exactement la même chose !

    Sa lecture me rend perplexe sur un certain point, mais je n’en dirai pas plus.










    En outre, comme ce problème de vérification de mot de passe est un souci sans doute très commun pour des gens qui font des sites avec PHP, il devrait y avoir une rubrique dans la FAQ qui en parle. Je n’ai pas vérifié si c’est le cas, j’ai un peu autre chose à faire. Merci de me corriger si je me trompe en pensant qu’il n’y a rien de tel dans la FAQ.









    Pour ce qui est de la réponse au problème posé ci-dessus, la réponse peut s’adapter de celle donnée dans la file en référence plus haut.
    Voici ce que ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "`^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$`"



    C’est marrant parce que j’ai répondu à quasiment exactement la même question ce matin, ici:
    http://www.developpez.net/forums/d93...xp-javascript/

    Ce qui montre qu’iln’y a pas que dans le forum Regex de PHP que ce problême a été posé et peut être cherché.

  9. #9
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par eyquem Voir le message
    D’autre part, je me permets de dire ( pour une fois) que je trouve un tantinet agaçant une certaine tendance que j’ai remarquée dans nombre de réponses, et peut être particulièrement dans le forum PHP, à savoir qu’à une question à laquelle il est apparemment difficile de trouver une réponse, il est demandé « et pourquoi tu veux faire ça ?». Sous entendu: si tu ne voulais pas faire ça, ou pas comme ça mais autrement, tu n’aurais pas ce problème insoluble. Sous-sous entendu: et nous non plus.
    Intéressant point de vue de l'utilisation d'un forum d'entraide : doit-on répondre seulement à la question posée ou bien s'intéresser à la source du problème ?

    Oui les regex peuvent tout faire, mais cela ne dédouane pas de creuser un peu le besoin. Par exemple, il s'avère souvent que les fonctions de chaînes (strtr, str_replace, etc...) suffisent à la résolutions en offrant des perfs meilleures.

    Donner la réponse à une mauvaise question n'est pas acceptable, et conseiller une meilleure solution est louable, non ?

    En l'occurrence, je préfère m'intéresser au besoin qui ne me semble pas fondé plutôt qu'à sa résolution, sinon je passerais mon temps à faire rentrer des carrés dans des trous ronds.

    Un petit exemple non informatique me vient à l'esprit : une personne de mon entourage m'a demandé il y a un ou deux mois comment s'y prendre pour jouer en bourse.
    Ce à quoi j'ai répondu que ce n'était vraiment pas le moment, en argumentant qui plus est.
    Las, une autre personne l'a parrainé sur un site de bourse online.
    D'où la question actuelle de cette personne : comment quitter la bourse en limitant la casse ?

Discussions similaires

  1. Vérifier le mot de passe administrateur
    Par sitirna dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/02/2008, 22h47
  2. Changer mot de passe sans connaître l'ancien
    Par luckan dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/06/2007, 20h12
  3. Vérifier un mot de passe..
    Par Fred2209 dans le forum Visual C++
    Réponses: 1
    Dernier message: 08/01/2007, 22h26
  4. Bloquer le pc avec un mot de passe sans quiter la session
    Par paterson dans le forum Windows XP
    Réponses: 2
    Dernier message: 11/11/2006, 22h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo