Udostępnij za pośrednictwem


Wskazówki: sprawdzanie poprawności złożoności haseł (Visual Basic)

Metoda ta sprawdza, czy niektóre cechy silnego hasła i aktualizuje parametr typu string o informacje o tym, które sprawdza, czy hasła nie powiedzie się.

Hasła mogą być wykorzystywane w bezpieczny system, aby autoryzować użytkownika.Jednakże musi być trudne dla nieautoryzowanych użytkowników do odgadnięcia hasła.Można użyć atakujących atak słownikowy program, który Iterowanie poprzez wszystkie wyrazy w słowniku (lub wielu słowników w różnych językach) i sprawdza, czy dowolny wyraz działa jak hasło użytkownika.Słabe hasła, takie jak "Yankees" lub "Mustang" można szybko złamać.Silniejszych haseł, takie jak "?You'L1N3vaFiNdMeyeP@sSWerd! ", są znacznie mniej prawdopodobna złamać.System chroniony hasłem powinny zapewnić, że użytkownikom wybrać silnych haseł.

Silne hasło jest złożonych (zawierających mieszaninę wielkie litery, małe litery, numerycznych i specjalnych znaków) i nie jest słowem.Ten przykład demonstruje, jak sprawdzić, co do złożoności.

Przykład

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

Kompilowanie kodu

Wywołanie tej metody, przekazując ciąg, który zawiera hasło.

W tym przykładzie wymaga:

Zabezpieczenia

Jeśli przenosisz hasła przez sieć, należy użyć metody bezpiecznego przekazywania danych.Aby uzyskać więcej informacji, zobacz ASP.NET Web Application Security.

Można zwiększyć dokładność ValidatePassword funkcji przez dodanie dodatkowej złożoności kontroli:

  • Porównać hasło i jego podciągów przeciwko nazwę użytkownika, identyfikator użytkownika i zdefiniowane przez aplikację słownika.Ponadto należy traktować wizualnie podobne znaki jako równoważne podczas przeprowadzania porównań.Na przykład traktować jako równoważne cyfry "1" i "3" litery "l" i "e".

  • Jeśli istnieje tylko jeden znak wielkimi literami, upewnij się, że nie jest to pierwszy znak hasła.

  • Upewnij się, że dwa ostatnie znaki hasła są znaki alfabetu.

  • Nie zezwalaj na hasła, w których wszystkie symbole są wprowadzane z klawiatury w górnym wierszu.

Zobacz też

Informacje

Regex

Inne zasoby

ASP.NET Web Application Security