Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ta metoda sprawdza niektóre cechy silnego hasła i aktualizuje parametr ciągu z informacjami o tym, które sprawdzanie hasła kończy się niepowodzeniem.
Hasła mogą być używane w bezpiecznym systemie do autoryzowania użytkownika. Jednak hasła muszą być trudne do odgadnięcia przez nieautoryzowanych użytkowników. Osoby atakujące mogą używać programu do ataków słownika , który iteruje wszystkie wyrazy w słowniku (lub wielu słownikach w różnych językach) i sprawdza, czy dowolny wyraz działa jako hasło użytkownika. Słabe hasła, takie jak "Yankees" lub "Mustang", można szybko odgadnąć. Silniejsze hasła, takie jak "?You'L1N3vaFiNdMeyeP@sSWerd!", są znacznie trudniejsze do odgadnięcia. System chroniony hasłem powinien zapewnić, że użytkownicy wybierają silne hasła.
Silne hasło jest złożone (zawierające kombinację wielkich liter, małych liter, liczb i znaków specjalnych) i nie jest słowem. W tym przykładzie pokazano, jak zweryfikować złożoność.
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łaj tę metodę, przekazując ciąg zawierający to hasło.
Ten przykład wymaga:
- Dostęp do elementów przestrzeni nazw System.Text.RegularExpressions. Dodaj instrukcję
Imports, jeśli nie precyzujesz pełnych nazw członków w swoim kodzie. Aby uzyskać więcej informacji, zobacz Import Statement (.NET Namespace and Type).
Bezpieczeństwo
Jeśli przenosisz hasło w sieci, musisz użyć bezpiecznej metody do przesyłania danych. Aby uzyskać więcej informacji, zobacz ASP.NET Web Application Security.
Dokładność funkcji można poprawić ValidatePassword , dodając dodatkowe kontrole złożoności:
Porównaj hasło i jego podciągy z nazwą użytkownika, identyfikatorem użytkownika i słownikiem zdefiniowanym przez aplikację. Ponadto podczas przeprowadzania porównań traktuj wizualnie podobne znaki jako równoważne. Na przykład należy traktować litery "l" i "e" jako równoważne cyfrom "1" i "3".
Jeśli istnieje tylko jedna wielka litera, upewnij się, że nie jest to pierwszy znak hasła.
Upewnij się, że ostatnie dwa znaki hasła to znaki litery.
Nie zezwalaj na hasła, w których wszystkie symbole są wprowadzane z górnego wiersza klawiatury.