Exemplarische Vorgehensweise: Überprüfen der Komplexität von Kennwörtern (Visual Basic)
Diese Methode prüft auf einige Merkmale sicherer Kennwörter und aktualisiert einen Zeichenfolgenparameter mit Informationen dazu, welchen Überprüfungen das Kennwort nicht standgehalten hat.
Kennwörter können in einem sicheren System verwendet werden, um Benutzer*innen zu autorisieren. Die Kennwörter müssen jedoch für unbefugte Benutzer*innen schwer zu erraten sein. Angreifer*innen können über einen Wörterbuchangriff alle Wörter in einem Wörterbuch (oder in mehreren Wörterbüchern in verschiedenen Sprachen) durchgehen und testen, ob eines der Wörter als Kennwort für den bzw. die Benutzer*in funktioniert. Schwache Kennwörter wie „Yankees“ oder „Mustang“ können schnell erraten werden. Sichere Kennwörter, wie z. B. „?You'L1N3vaFiNdMeyeP@sSWerd!“, können hingegen nicht ohne Weiteres erraten werden. Ein kennwortgeschütztes System sollte sicherstellen, dass die Benutzer*innen sichere Kennwörter verwenden.
Ein sicheres Kennwort ist komplex (es enthält eine Kombination aus Großbuchstaben, Kleinbuchstaben, Ziffern und Sonderzeichen) und besteht nicht aus einem Wort. Dieses Beispiel zeigt, wie die Komplexität überprüft werden kann.
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 das Kennwort enthält.
Für dieses Beispiel benötigen Sie Folgendes:
- Zugriff auf die Member des System.Text.RegularExpressions-Namespace Fügen Sie eine
Imports
-Anweisung hinzu, wenn Sie Membernamen in Ihrem Code nicht vollqualifizieren. Weitere Informationen finden Sie unter Imports-Anweisung (.NET-Namespace und -typ).
Sicherheit
Wenn Sie das Kennwort über ein Netzwerk übertragen, müssen Sie eine sichere Methode für die Datenübertragung verwenden. Weitere Informationen finden Sie unter Sicherheit von ASP.NET-Webanwendungen.
Sie können die Genauigkeit der ValidatePassword
-Funktion verbessern, indem Sie zusätzliche Komplexitätsprüfungen hinzufügen:
Vergleichen Sie das Kennwort und seine Teilzeichenfolgen mit dem Namen der jeweiligen Benutzer*innen, der Benutzerkennung und einem anwendungsdefinierten Wörterbuch. Behandeln Sie außerdem visuell ähnliche Zeichen als gleichwertig, wenn Sie die Vergleiche durchführen. Behandeln Sie zum Beispiel die Buchstaben „l“ und „e“ als gleichwertig mit den Ziffern 1 und 3.
Wenn nur ein Großbuchstabe vorhanden ist, achten Sie darauf, dass es sich nicht um das erste Zeichen des Kennworts handelt.
Achten Sie darauf, dass die letzten beiden Zeichen des Kennworts Buchstaben sind.
Lassen Sie keine Kennwörter zu, bei denen alle Symbole über die oberste Zeile der Tastatur eingegeben werden.