Exemplarische Vorgehensweise: Überprüfen komplexer Kennwörter (Visual Basic)

Aktualisiert: November 2007

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.

Für dieses Beispiel benötigen Sie Folgendes:

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 Sicherheit für ASP.NET-Webanwendungen.

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.

Siehe auch

Referenz

Regex

Weitere Ressourcen

Sicherheit für ASP.NET-Webanwendungen

Exemplarische Vorgehensweisen für Zeichenfolgen in Visual Basic