2017-10-17 3 views
1

Je réécris nos règles de validation de mot de passe pour répondre à un ensemble très strict d'exigences pour une application de formulaires Web asp.net C#. J'utilise regex depuis la plupart de ces éléments (tels que les min caractères, les caractères autorisés, etc.).Validation de mot de passe ASP.NET contient des caractères de 2 jeux

Une des conditions pour lesquelles je rencontre des difficultés pour trouver la solution est la suivante: Doit contenir des caractères de 2 des 4 classes de caractères autorisées.

Dans ce cas, les classes autorisées sont majuscules, minuscules, numériques et spéciales (US ASCII).

Si quelqu'un peut vous aider à écrire ce qui serait appréciable. Merci

+1

Pourquoi un mot de passe aussi faible? Ce n'est pas «un ensemble très strict d'exigences», c'est en fait considéré très faible. Les utilisateurs devraient être autorisés à utiliser des * gros * mots de passe sans restrictions artificielles qui les obligent à utiliser des mots de passe courts et faibles. Pourquoi seulement les caractères ASCII? Pourquoi ne pas me laisser taper 'Τί σε νοιάζει εσένα τί σκέφτονται οι άλλοι?' –

+6

En fait, les exigences sont pires que faibles. Ils * enfreignent * les directives du NIST des États-Unis, du NCSC du Royaume-Uni et du [Guide de mot de passe] de Microsoft (https://www.microsoft.com/fr-fr/research/wp-content/uploads/2016/06/Microsoft_Password_Guidance-1. pdf). Si vous êtes victime d'une violation, vous serez doublement responsable de l'application consciente de mots de passe faibles. Vérifiez [l'article de Troy Hunt] (https://www.troyhunt.com/passwords-evolved-authentication-guidance-for-the-modern-era/) sur les directives actuelles. –

+0

Je ne pense pas qu'il soit possible de tout faire correspondre dans une seule regex. Mais le plus simple serait d'utiliser la méthode [contains] (https://msdn.microsoft.com/en-us/library/dy85x1sa (v = vs.110) .aspx) pour vérifier chaque restriction. Mais, jetez un coup d'oeil sur l'article @PanagiotisKanavos posté avant de faire quelque chose que vous pourriez regretter plus tard ... –

Répondre

1

Les commentateurs ont tous exprimé des préoccupations légitimes, mais je voudrais simplement partager cette méthode pour faire correspondre « au moins 2 des 4 éléments »:

(?:.*?(?:a(?!.*a)|b(?!.*b)|c(?!.*c)|d(?!.*d))){2} 

Les lettres 'a' à « d » peut être remplacé par des classes de caractères appropriées pour cette question, mais il peut également être étendu pour correspondre plus généralement à "au moins X des sous-expressions non chevauchantes Y".