İzlenecek yol: Parolaların Karmaşık Olduğunu Doğrulama (Visual Basic)

Bu yöntem bazı güçlü parola özelliklerini denetler ve parolayı denetleyen bilgilerle bir dize parametresini güncelleştirir.

Parolalar, bir kullanıcıyı yetkilendirmek için güvenli bir sistemde kullanılabilir. Ancak, yetkisiz kullanıcıların tahmin etmesi için parolaların zor olması gerekir. Saldırganlar, bir sözlükteki tüm sözcükleri (veya farklı dillerde birden çok sözlük) yineleyen ve sözcüklerin herhangi birinin kullanıcı parolası olarak çalışıp çalışmadığını test eden bir sözlük saldırı programı kullanabilir. "Yankees" veya "Mustang" gibi zayıf parolalar hızla tahmin edilebilir. "? gibi daha güçlü parolalar L1N3vaFiNdMeyeP@sSWerd!", tahmin edilme olasılığı çok daha düşüktür. Parola korumalı bir sistem, kullanıcıların güçlü parolalar seçmesini sağlamalıdır.

Güçlü bir parola karmaşıktır (büyük harf, küçük harf, sayısal ve özel karakterlerin karışımını içerir) ve bir sözcük değildir. Bu örnekte karmaşıklığın nasıl doğrulanması gösterilmektedir.

Örnek

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

Kodu derleme

Bu parolayı içeren dizeyi geçirerek bu yöntemi çağırın.

Bu örnek şunları gerektirir:

Güvenlik

Parolayı bir ağ üzerinden taşıyorsanız, verileri aktarmak için güvenli bir yöntem kullanmanız gerekir. Daha fazla bilgi için bkz . web uygulaması güvenliği ASP.NET.

Ek karmaşıklık denetimleri ekleyerek işlevin ValidatePassword doğruluğunu geliştirebilirsiniz:

  • Parolayı ve alt dizelerini kullanıcının adı, kullanıcı tanımlayıcısı ve uygulama tanımlı bir sözlükle karşılaştırın. Buna ek olarak, karşılaştırmaları gerçekleştirirken görsel olarak benzer karakterleri eşdeğer olarak değerlendirin. Örneğin, "l" ve "e" harflerini "1" ve "3" rakamlarının eşdeğeri olarak değerlendirin.

  • Yalnızca bir büyük harf karakter varsa, parolanın ilk karakteri olmadığından emin olun.

  • Parolanın son iki karakterinin harf karakterleri olduğundan emin olun.

  • Klavyenin üst satırından tüm simgelerin girildiği parolalara izin verme.

Ayrıca bkz.