Partager via


Procédure pas à pas : validation du fait que les mots de passe sont complexes (Visual Basic)

Cette méthode vérifie certaines caractéristiques de mot de passe fort et met à jour un paramètre de chaîne avec des informations sur lesquelles le mot de passe échoue.

Les mots de passe peuvent être utilisés dans un système sécurisé pour autoriser un utilisateur. Toutefois, les mots de passe doivent être difficiles à deviner pour les utilisateurs non autorisés. Les attaquants peuvent utiliser un programme d’attaque de dictionnaire , qui itère dans tous les mots d’un dictionnaire (ou plusieurs dictionnaires dans différentes langues) et teste si l’un des mots fonctionne en tant que mot de passe d’un utilisateur. Les mots de passe faibles tels que « Yankees » ou « Mustang » peuvent être deviner rapidement. Mots de passe plus forts, tels que « ? » Vous L1N3vaFiNdMeyeP@sSWerd !", sont beaucoup moins susceptibles d’être devinés. Un système protégé par mot de passe doit s’assurer que les utilisateurs choisissent des mots de passe forts.

Un mot de passe fort est complexe (contenant un mélange de majuscules, minuscules, numériques et caractères spéciaux) et n’est pas un mot. Cet exemple montre comment vérifier la complexité.

Exemple :

Code

''' <summary>Determines if a password is sufficiently complex.</summary>
''' <param name="pwd">Password to validate</param>
''' <param name="minLength">Minimum number of password characters.</param>
''' <param name="numUpper">Minimum number of uppercase characters.</param>
''' <param name="numLower">Minimum number of lowercase characters.</param>
''' <param name="numNumbers">Minimum number of numeric characters.</param>
''' <param name="numSpecial">Minimum number of special characters.</param>
''' <returns>True if the password is sufficiently complex.</returns>
Function ValidatePassword(ByVal pwd As String, 
    Optional ByVal minLength As Integer = 8, 
    Optional ByVal numUpper As Integer = 2, 
    Optional ByVal numLower As Integer = 2, 
    Optional ByVal numNumbers As Integer = 2, 
    Optional ByVal numSpecial As Integer = 2) As Boolean

    ' Replace [A-Z] with \p{Lu}, to allow for Unicode uppercase letters.
    Dim upper As New System.Text.RegularExpressions.Regex("[A-Z]")
    Dim lower As New System.Text.RegularExpressions.Regex("[a-z]")
    Dim number As New System.Text.RegularExpressions.Regex("[0-9]")
    ' Special is "none of the above".
    Dim special As New System.Text.RegularExpressions.Regex("[^a-zA-Z0-9]")

    ' Check the length.
    If Len(pwd) < minLength Then Return False
    ' Check for minimum number of occurrences.
    If upper.Matches(pwd).Count < numUpper Then Return False
    If lower.Matches(pwd).Count < numLower Then Return False
    If number.Matches(pwd).Count < numNumbers Then Return False
    If special.Matches(pwd).Count < numSpecial Then Return False

    ' Passed all checks.
    Return True
End Function

Sub TestValidatePassword()
    Dim password As String = "Password"
    ' Demonstrate that "Password" is not complex.
    MsgBox(password & " is complex: " & ValidatePassword(password))

    password = "Z9f%a>2kQ"
    ' Demonstrate that "Z9f%a>2kQ" is not complex.
    MsgBox(password & " is complex: " & ValidatePassword(password))
End Sub

Compiler le code

Appelez cette méthode en transmettant la chaîne qui contient ce mot de passe.

Cet exemple nécessite :

Sécurité

Si vous déplacez le mot de passe sur un réseau, vous devez utiliser une méthode sécurisée pour transférer des données. Pour plus d’informations, consultez ASP.NET Sécurité des applications web.

Vous pouvez améliorer la précision de la ValidatePassword fonction en ajoutant des vérifications de complexité supplémentaires :

  • Comparez le mot de passe et ses sous-chaînes par rapport au nom de l’utilisateur, à l’identificateur de l’utilisateur et à un dictionnaire défini par l’application. En outre, traitez visuellement des caractères similaires comme équivalents lors de l’exécution des comparaisons. Par exemple, traitez les lettres « l » et « e » comme équivalentes aux chiffres « 1 » et « 3 ».

  • S’il n’existe qu’un seul caractère majuscule, assurez-vous qu’il ne s’agit pas du premier caractère du mot de passe.

  • Assurez-vous que les deux derniers caractères du mot de passe sont des caractères de lettre.

  • N’autorisez pas les mots de passe dans lesquels tous les symboles sont entrés à partir de la ligne supérieure du clavier.

Voir aussi