We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Problème de fonctionnement de l'expression REGEX pour la complexité des mots de passe

Pierre ALLARIA · on 1/24/20 at 9:29 AM

Bonjour,

J'ai suivi les instructions de la FAQ Comment ajouter des règles de validation lors du choix / changement de mot de passe de l'utilisateur ? pour mettre en place des règles de validation des mots de passe.

J'utiliser l'expression REGEX suivante
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$!%*?&;.])[A-Za-z\d$!%*?&.;]{8,}$

qui, sauf erreur de ma part, correspond aux critères suivants : au moins 8 caractères dont 1 lettre MAJUSCULE, 1 lettre minuscule, 1 chiffre et 1 des caractères suivants $!%*?&.;

Quand je test l'expression REGEX via les sites cités dans la FAQ avec des mots de passe comme $Abc1230 ou Ab1!rt5% ou encore zA5%&dr4, ceux-ci répondent bien aux critères de l'expression REGEX.

Mais si j'utilise ces mêmes mots de passe pour la réinitialisation d'un compte de mon site JALIOS, ils sont refusés. Le site affiche le message

Le site est en JCMS 10.0.1 (build-20190613123655).

Voyez-vous d'où le problème pourrait provenir ?

D'avance merci pour votre aide.

0 pts
Olivier Jaquemet · on 1/24/20 at 9:38 AM

Bonjour,

L'explication est je pense la suivante : vous avez collé l'expression régulière telle quelle dans un fichier de propriété. Hors, dans les fichiers de propriétés, certains caractères doivent impérativement être échappés. C'est notamment le cas du caractère \ qui doit être doublé (comme indiqué dans la FAQ que vous citez).

Ainsi la propriété ressemblera à quelque chose comme ça (non validé) : 

member.password-validation-regex: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$!%*?&;.])[A-Za-z\\d$!%*?&.;]{8,}$

 

PS : Attention, vous utilisez une ancienne version de JPlatform, diffusé en mars 2018, qui ne bénéficie pas des dernières corrections, notamment celles concernant la sécurité. Il y a eu 2 versions de maintenances depuis, et des correctifs livrés sous forme de PatchPlugin. Si vous êtes soucieux de définir des mots de passes sécurisé pour vos utilisateurs, pensez également à maintenir votre applicatif à jour.

2 pts
Pierre ALLARIA · on 1/24/20 at 4:27 PM

Bonjour, @Olivier Jaquemet ,

Merci pour votre réponse. La FAQ mentionne effectivement le point des caractères d'échappement, mais de façon pas très explicite ("Il faut bien vérifier les caractères d'échappement"). Qui plus est j'avais bien pris soin de tester mon expression REGEX en JAVA via le site http://www.regexplanet.com/advanced/java/index.html comme recommandé dans la FAQ.

Bref, le problème venait bien des caractères d'échappement. @Arnaud Juanola m'a fourni la bonne syntaxe à utiliser (merci à lui) :

  • Syntaxe d'origine qui ne fonctionne pas : ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$!%*?&;.])[A-Za-z\d$!%*?&.;]{8,}$
  • Syntaxe correcte : ^((?=\\S*?[A-Z])(?=\\S*?[a-z])(?=\\S*?[0-9])(?=\\S*?[$!%*?&.;]).{8,})$

Ca ne s'invente pas 🙂.

2 pts