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 :

regex permissive avec les accents [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut regex permissive avec les accents
    Bonjour amis aliens qui maîtrisez les Regex(es) !

    Je veux contraindre un mot de passe d'au moins 6 lettres, qui doit comporter au moins une lettre minuscule (accentuée ou non), puis au moins une lettre majuscule (accentuée ou non) puis au moins un chiffre...
    Et après moult essais, même ceci ne fonctionne pas...
    Je ne sais plus quoi essayer.
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    var mediumRegex = new RegExp("^(?=.*([A-Z]|[ÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ]))(?=.*([a-z]|[áàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ]))(?=.*[0-9]).{6,20}$", "g");
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour et bienvenue sur DVP,
    Comme tu es nouvelle sur le site (), on te pardonne de NE PAS avoir fait de recherche....
    "regex mot de passe"

    Celle-ci est intéressante : https://www.developpez.net/forums/d1...ex-mots-passe/
    Notamment la remarque de CosmoKnacki :

    Citation Envoyé par CosmoKnacki Voir le message
    À propos des mots de passe en général, inutile de se torturer avec des mélanges biscornus de caractères, car en définitive et au grand damne de certains: c'est la taille qui compte.
    J'ajoute que de nos jours, 6 caractères est largement INsuffisant.
    Au minimum: 8, 10 ou 12 caractères sont recommandés.


    Ta regex n'empêchera pas d'écrire : "Passw0rd".
    Ou "Passw0rd!" si tu penses "sécuriser plus" en ajoutant un caractère spécial.
    Dernière modification par Invité ; 29/09/2019 à 12h06.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Mise à part la remarque précédente et le fait que le flag g n'est pas utile (la pattern décrit une chaîne complète donc elle ne peut réussir qu'une seule fois par chaîne testée), il n'y a pas de raison dans la pattern pour que ça ne fonctionne pas. Personnellement j'aurai utilisé la forme littérale plutôt que l'écriture objet et je me serais passé des ([A-Z]|[ÁÀÂÄÃ...]) pour tout mettre dans la même classe de caractères:

    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    var mediumRegex = /^(?=.*[A-ZÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ])(?=.*[a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ])(?=.*[0-9]).{6,20}$/;

    Le problème vient peut être de la manière dont tu l'exploites? Est-ce que tu utilises bien la méthode RegExp.prototype.test()?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Coucou,

    Déjà merci à vous deux.

    J'ai oublié de préciser que j'étais en Jquery.

    edit : tu n'as pas compris ma démarche Jreaux. Je ne veux pas compliquer la vie aux gens, au contraire. Je veux que le gars âgé qui saisit "Dédé1937" ne se fasse pas jeter.


    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     //vérif de la sécurité du mdp
          var mediumRegex = /^(?=.*[A-ZÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ])(?=.*[a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ])(?=.*[0-9]).{8,20}$/;
          $('#mdp').on('keyup', function(e) {
            if ($(this).val()=='G2ParFor'){
              $('#mdp_comment').removeClass().addClass('alert alert-error').html('Ce mot de passe n\'était qu\'un exemple ! Merci d\'en prendre un autre. ;) ');
              return false;
            }else if (mediumRegex.test($(this).val())) {
              $('#mdp_comment').removeClass().addClass('alert alert-success').html('Le mot de passe respecte bien les consignes.');
              return true;
            } else {
              $('#mdp_comment').removeClass().addClass('alert alert-error').html('Le mot de passe ne respecte pas les consignes !');
              return false;
            }
          })

    @jreaux :ok suis passée à 8 mini.
    @Cosmo : ça ne marche pas comme je veux. A savoir que si je mets "Loulou#44", ça passe... alors que ça devrait bloquer à cause du dièse... bizarre ?
    Sinon, bien sûr, j'ai essayé ton conseil prototype.test() mais ça ne passe pas en jQuery apparemment ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par Dendrite
    si je mets "Loulou#44", ça passe... alors que ça devrait bloquer à cause du dièse... bizarre ?
    Ah bah non, c'est pas bizarre du tout, c'est parfaitement normal! Ta pattern dit (car les patterns parlent): "Il faut une minuscule, une majuscule, un chiffre et entre 8 et 20 caractères au total.", à aucun moment elle ne dit que les 8, 20 caractères sont exclusivement des lettres et des chiffres!
    Pour cela, il faut remplacer .{8,20} par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [A-ZÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒa-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ0-9]{8,20}
    .


    RegExp.prototype.test() est juste la manière dont la méthode test() est désignée dans la documentation Javascript, il ne faut pas rajouter "prototype" dans le code.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Mais là, tu ne dis plus que l'on doit avoir AU MOINS une maj, une min et un chiffre, dans ta dernière regex ?

    edit
    Alleluia !

    Une petite pause et j'ai enfin compris.
    Merci saucisse de l'espaaaaaaaaaaaaace !

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    var mediumRegex = new RegExp("^(?=.*[A-ZÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ])(?=.*[a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ])(?=.*[0-9])[A-ZÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒa-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ0-9]{8,20}$");
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Invité
    Invité(e)
    Par défaut
    Hello Dendrite,

    si si, j'ai bien compris la démarche.

    Par contre je pensais à ça :
    [...] il existe une autre voie, à priori plus simple : la phrase de passe (passphrase). Il s’agit d’une phrase longue, difficile à “craquer”, mais facile à retenir.
    [...]Au lieu d’utiliser un mot de passe garni de chiffres, de lettres mélangées et de symboles, il suffit donc de sélectionner quatre mots, qui forment ensemble une phrase n’ayant aucun sens. [...]

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    personnellement je ne comprends pas du tout le principe de caractère interdit dans un mot de passe.
    Que tu forces des minimas je le conçois mais plus c'est une faiblesse du point de vue de la sécurité. Un attaquant sait quels caractères sont autorisés et/ou interdits, ça réduit le champ des possibles.

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Une solution basée sur l'indice d'entropie de Shannon (comme suggéré dans le post lié) en Vanilla Javascript:
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    let pwd = {
        s: '',
        shannon: function() {
            return Object.values(
                [...this.s].reduce((c, v) => { c[v] = c[v] + 1 || 1; return c }, {})
            ).reduce((c, v, _, a) => c - v / a.length * Math.log(v / a.length, 2), 0)
        },
        strength: function() {
            let sha = this.shannon();
            if ( sha < 3 ) return 'faible';
            if ( sha < 4 ) return 'moyen';
            return 'fort';
        }
    };
     
    pwd.s = 'Sur une barricade au milieu des pavés';
    console.log(pwd.strength()); // fort
    (pour les paramètres de la fonction de callback d'Array.prototype.reduce, j'utilise c carry ("la retenue" comme en PHP plutôt que "a" l'"accumulateur" en Javascript), v value, i index, a array, le cas échéant _ pour un paramètre inusité)

    La variation de l'indice dépend de la taille du dictionnaire (nombre de caractères différents dans la chaîne) et de la taille de la chaîne (ou de la répétition de caractères ce qui au final revient au même). À noter que la position des caractères n'a aucune importance (une anagramme aura exactement le même indice).

    Dans l'exemple, le barème est fait à la louche ( <3 faible, <4 moyen, sinon fort ), il est donc à adapter.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Oui, je me rends à vos arguments. Ca marche. Je laisse la sécurité minima, et je ne filtre aucun caractère.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par jreaux62 Voir le message
    En fait, j'irais dans la direction inverse : au lieu de tester si c'est un "bon mots de passe", je vérifierais que ce n'est PAS un "mauvais mots de passe".
    Pour faire simple : qu'il ne fait pas partie des "pires mots de passe" !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb avec les accents via ODBC
    Par bcs dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/12/2005, 16h45
  2. [comparaison] probleme avec les accents
    Par Bibicmoi dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 29/08/2005, 20h51
  3. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11
  4. Ecrire caractère avec les accents avec vi ?
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 18/05/2004, 17h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56

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