Exemplarische Vorgehensweise: Überprüfen der Komplexität von Kennwörtern (Visual Basic)
Diese Methode überprüft einige Merkmale sicherer Kennwörter und aktualisiert einen Zeichenfolgenparameter mit den Informationen über die fehlgeschlagenen Kennwortüberprüfungen.
Kennwörter können in einem sicheren System zum Autorisieren eines Benutzers verwendet werden. Die Kennwörter müssen jedoch für unbefugte Benutzer schwierig zu erraten sein. Angreifer können ein Programm für Wörterbuchangriffe verwenden, das alle Wörter in einem Wörterbuch durchläuft (oder mehrere Wörterbücher in verschiedenen Sprachen) und überprüft, ob eines der Wörter als Kennwort eines Benutzers fungiert. Unsichere Kennwörter, z. B. "Hertha" oder "Mustang", können schnell erraten werden. Sicherere Kennwörter, z. B "?Me1NkeNnWoRtIStGEh@im!", sind viel schwieriger zu erraten. Ein kennwortgeschütztes System sollte sicherstellen, dass Benutzer sichere Kennwörter auswählen.
Ein sicheres Kennwort ist komplex (mit einer Mischung aus Großbuchstaben, Kleinbuchstaben, numerischen Zeichen und Sonderzeichen) und kein lexikalisches Wort. In diesem Beispiel wird veranschaulicht, wie Komplexität überprüft wird.
Beispiel
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
Kompilieren des Codes
Rufen Sie diese Methode auf, indem Sie die Zeichenfolge übergeben, die dieses Kennwort enthält.
Dieses Beispiel setzt Folgendes voraus:
- Zugriff auf die Member des System.Text.RegularExpressions-Namespaces. Fügen Sie eine Imports-Anweisung hinzu, wenn der Code keine vollqualifizierten Membernamen enthält. Weitere Informationen finden Sie unter Imports-Anweisung (.NET-Namespace und Typ).
Sicherheit
Wenn Sie das Kennwort im Netzwerk übertragen, müssen Sie eine sichere Methode für die Datenübertragung verwenden. Weitere Informationen finden Sie unter ASP.NET Web Application Security.
Sie können die Präzision der ValidatePassword-Funktion erhöhen, indem Sie zusätzliche Komplexitätsüberprüfungen hinzufügen:
Vergleichen Sie das Kennwort und seine Teilzeichenfolgen mit dem Namen des Benutzers, der Benutzer-ID und einem anwendungsdefinierten Wörterbuch. Behandeln Sie darüber hinaus optisch ähnliche Zeichen als gleiche Zeichen, wenn Sie die Vergleiche ausführen. Behandeln Sie z. B. die Buchstaben "I" und "e" als Entsprechungen der Zahlen "1" und "3".
Wenn nur ein Großbuchstabe vorhanden ist, stellen Sie sicher, dass er nicht das erste Zeichen des Kennworts ist.
Stellen Sie sicher, dass die letzten beiden Zeichen des Kennworts Buchstaben sind.
Lassen Sie keine Kennwörter zu, für die sämtliche Zeichen auf der obersten Reihe der Tastatur eingegeben werden.