Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato metoda ověří některé vlastnosti silného hesla a aktualizuje řetězcový parametr informacemi o tom, které kontroly heslo nesplňuje.
Hesla je možné použít v zabezpečeném systému k autorizaci uživatele. Hesla ale musí být pro neoprávněné uživatele obtížné uhodnout. Útočníci můžou použít program útoku ve slovníku , který iteruje všechna slova ve slovníku (nebo více slovníků v různých jazycích) a testuje, jestli některá slova fungují jako heslo uživatele. Slabá hesla jako "Yankees" nebo "Mustang" se dají rychle odhadnout. Silná hesla, například "?You'L1N3vaFiNdMeyeP@sSWerd!", je mnohem méně pravděpodobné tipnout. Systém chráněný heslem by měl zajistit, aby uživatelé zvolili silná hesla.
Silné heslo je složité (obsahuje kombinaci velkých, malých, číselných a speciálních znaků) a není to slovo. Tento příklad ukazuje, jak ověřit složitost.
Příklad
Kód
''' <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
Kompilace kódu
Zavolejte tuto metodu tak, že předáte řetězec, který obsahuje to heslo.
Tento příklad vyžaduje:
- Přístup k členům System.Text.RegularExpressions oboru názvů Přidejte příkaz
Imports
, pokud v kódu nemáte plně kvalifikované názvy členů. Další informace naleznete v tématu příkaz Import (obor názvů a typ .NET).
Bezpečnost
Pokud přesouváte heslo přes síť, musíte použít zabezpečenou metodu přenosu dat. Další informace najdete v tématu ASP.NET Zabezpečení webových aplikací.
Přesnost ValidatePassword
funkce můžete zlepšit přidáním dalších kontrol složitosti:
Porovnejte heslo a jeho podřetěděce s uživatelským jménem, identifikátorem uživatele a slovníkem definovaným aplikací. Kromě toho při porovnávání zacházet s vizuálně podobnými znaky jako ekvivalentními. Například zachází s písmeny "l" a "e" jako s ekvivalentem číslic "1" a "3".
Pokud existuje jenom jeden velké písmeno, ujistěte se, že se nejedná o první znak hesla.
Ujistěte se, že poslední dva znaky hesla jsou písmena.
Nepovolujte hesla, ve kterých jsou všechny symboly zadané z horního řádku klávesnice.