Sdílet prostřednictvím


Návod: Ověření, že hesla jsou složitá (Visual Basic).

Tato metoda kontroly pro některé charakteristiky silné heslo a aktualizuje informace o tom, které kontroluje hesla nezdaří parametr řetězec.

Hesla slouží k ověření uživatele v zabezpečeném systému.Však musí být obtížné neoprávněným uživatelům uhádnutí hesla.Útočníci lze použít útoku program, který prochází všechna slova ve slovníku (nebo více slovníků v různých jazycích) a ověřuje, zda některá slova pracovat jako heslo uživatele.Slabá hesla jako "Yankees" nebo "Mustang" může být rychle odhaleno.Silnější hesla, jako například "?You'L1N3vaFiNdMeyeP@sSWerd! ", je mnohem méně pravděpodobné, že být odhaleno.Chráněné heslem systému by měly zajistit, že uživatelé zvolit silná hesla.

Silné heslo je složitý (obsahující směs velká písmena, malá písmena, číselné a speciální znaky) a není slovo.Tento příklad ukazuje, jak ověřit složitosti.

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

Probíhá kompilace kódu

Tuto metodu lze volejte předáním řetězec, který obsahuje toto heslo.

Tento příklad vyžaduje:

Zabezpečení

Pokud přesunujete heslo prostřednictvím sítě, je třeba použít zabezpečené metody přenosu dat.Další informace naleznete v tématu ASP.NET Web Application Security.

Můžete zvýšit přesnost ValidatePassword funkce přidáním další složitost kontroly:

  • Porovnání heslo a jeho dílčích řetězců proti uživatelské jméno, identifikátor uživatele a slovník definované aplikací.Kromě toho považovala vizuálně podobné znaky jako ekvivalent při provádění jejich porovnání.Písmena "l" a "e" například považovat za rovnocenné číslice "1" a "3".

  • Pokud existuje pouze jeden znak velkými písmeny, ujistěte se, že není heslo prvního znaku.

  • Ujistěte se, že poslední dva znaky hesla jsou znaky písmena.

  • Nepovolit hesla, které jsou vloženy všechny symboly z horní řádek klávesnici.

Viz také

Referenční dokumentace

Regex

Další zdroje

ASP.NET Web Application Security