Dela via


Genomgång: Validera att lösenord är komplexa (Visual Basic)

Den här metoden söker efter vissa egenskaper för starka lösenord och uppdaterar en strängparameter med information om vilka kontroller av lösenordet som misslyckas.

Lösenord kan användas i ett säkert system för att auktorisera en användare. Lösenorden måste dock vara svåra för obehöriga användare att gissa. Angripare kan använda ett ordlisteangreppsprogram som itererar genom alla ord i en ordlista (eller flera ordlistor på olika språk) och testar om något av orden fungerar som en användares lösenord. Svaga lösenord som "Yankees" eller "Mustang" kan gissas snabbt. Starkare lösenord, till exempel "? Du L1N3vaFiNdMeyeP@sSWerd!", är mycket mindre sannolikt att gissas. Ett lösenordsskyddat system bör se till att användarna väljer starka lösenord.

Ett starkt lösenord är komplext (innehåller en blandning av versaler, gemener, numeriska tecken och specialtecken) och är inte ett ord. Det här exemplet visar hur du verifierar komplexiteten.

Exempel

Kod

''' <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

Kompilera koden

Anropa den här metoden genom att skicka strängen som innehåller lösenordet.

Det här exemplet kräver:

Säkerhet

Om du flyttar lösenordet över ett nätverk måste du använda en säker metod för att överföra data. Mer information finns i ASP.NET Web Application Security.

Du kan förbättra funktionens ValidatePassword noggrannhet genom att lägga till ytterligare komplexitetskontroller:

  • Jämför lösenordet och dess understrängar med användarens namn, användaridentifierare och en programdefinierad ordlista. Dessutom behandlar du visuellt liknande tecken som likvärdiga när du utför jämförelserna. Du kan till exempel behandla bokstäverna "l" och "e" som likvärdiga med siffrorna "1" och "3".

  • Om det bara finns ett versalt tecken kontrollerar du att det inte är lösenordets första tecken.

  • Kontrollera att de två sista tecknen i lösenordet är bokstavstecken.

  • Tillåt inte lösenord där alla symboler anges från tangentbordets översta rad.

Se även