Overzicht: valideren dat wachtwoorden complex zijn (Visual Basic)
Met deze methode wordt gecontroleerd op bepaalde kenmerken van sterke wachtwoorden en wordt een tekenreeksparameter bijgewerkt met informatie over welke het wachtwoord mislukt.
Wachtwoorden kunnen worden gebruikt in een beveiligd systeem om een gebruiker te autoriseren. De wachtwoorden moeten echter moeilijk zijn voor onbevoegde gebruikers om te raden. Aanvallers kunnen een programma voor woordenlijstenaanvallen gebruiken, dat alle woorden in een woordenlijst (of meerdere woordenlijsten in verschillende talen) doorloopt en test of een van de woorden werkt als een wachtwoord van een gebruiker. Zwakke wachtwoorden zoals 'Yankees' of 'Mustang' kunnen snel worden geraden. Sterkere wachtwoorden, zoals '? U L1N3vaFiNdMeyeP@sSWerd!, is veel minder waarschijnlijk. Een met een wachtwoord beveiligd systeem moet ervoor zorgen dat gebruikers sterke wachtwoorden kiezen.
Een sterk wachtwoord is complex (met een combinatie van hoofdletters, kleine letters, numerieke en speciale tekens) en is geen woord. In dit voorbeeld ziet u hoe u de complexiteit kunt controleren.
Opmerking
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
De code compileren
Roep deze methode aan door de tekenreeks door te geven die dat wachtwoord bevat.
Voor dit voorbeeld is het volgende vereist:
- Toegang tot de leden van de System.Text.RegularExpressions naamruimte. Voeg een
Imports
instructie toe als u niet volledig in aanmerking komende ledennamen in uw code hebt. Zie Importinstructie (.NET-naamruimte en -type) voor meer informatie.
Beveiliging
Als u het wachtwoord over een netwerk verplaatst, moet u een veilige methode gebruiken voor het overdragen van gegevens. Zie ASP.NET Web Application Security voor meer informatie.
U kunt de nauwkeurigheid van de ValidatePassword
functie verbeteren door extra complexiteitscontroles toe te voegen:
Vergelijk het wachtwoord en de bijbehorende subtekenreeksen met de naam, de gebruikers-id en een woordenlijst die door de toepassing is gedefinieerd. Daarnaast moet u visueel vergelijkbare tekens behandelen als gelijkwaardig bij het uitvoeren van de vergelijkingen. Behandel bijvoorbeeld de letters 'l' en 'e' als equivalent aan de cijfers '1' en '3'.
Als er slechts één hoofdletter is, moet u ervoor zorgen dat het niet het eerste teken van het wachtwoord is.
Zorg ervoor dat de laatste twee tekens van het wachtwoord lettertekens zijn.
Sta geen wachtwoorden toe waarin alle symbolen worden ingevoerd in de bovenste rij van het toetsenbord.