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

Tato metoda kontroluje některé charakteristiky silného hesla a aktualizuje parametr řetězce s informacemi o tom, které kontroly hesla se nezdaří.

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á. Útočníci mohou použít program slovníkového útoku, který prochází všechna slova ve slovníku (nebo ve více slovníkech v různých jazycích) a testuje, jestli některý ze slov funguje jako heslo uživatele. Slabá hesla, jako jsou Například Něcos nebo Mustang, je možné rychle uhádnout. Silnější hesla, například ? You' L1N3vaFiNdMeyeP@sSWerd !", are much less likely to be guessed. Systém chráněný heslem by měl zajistit, aby si uživatelé zvolili silná hesla.

Silné heslo je složité (obsahující 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

Tuto metodu zavolejte předáním řetězce, který obsahuje toto heslo.

Tento příklad vyžaduje:

Zabezpečení

Pokud přesouváte heslo přes síť, musíte použít zabezpečenou metodu pro přenos dat. Další informace najdete v tématu ASP.NET Web Application Security.

Přesnost funkce můžete zlepšit přidáním ValidatePassword dalších kontrol složitosti:

  • Porovnejte heslo a jeho podřetězce s uživatelským jménem, identifikátorem uživatele a slovníkem definovaným aplikací. Při porovnávání se navíc s vizuálně podobnými znaky zachází jako s ekvivalentními znaky. S písmeny "l" a "e" se například zachází jako s číslicemi "1" a "3".

  • Pokud se používá jenom jedno velké písmeno, ujistěte se, že se jedná o první znak hesla.

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

  • Nepovoluje hesla, ve kterých jsou všechny symboly zadány z horního řádku klávesnice.

Viz také