Поделиться через


Пошаговое руководство. Проверка паролей на сложность (Visual Basic)

Этот метод проверяет некоторые характеристики строгого пароля и обновляет строковый параметр сведениями о том, какие проверки пароля не выполнены.

Пароли могут использоваться в системе безопасности для авторизации пользователя. Однако пароли должны быть сложными для взлома. Злоумышленники могут использовать программу словарной атаки, которая перебирает все слова в словаре (или нескольких словарей на разных языках) и проверяет, является ли любое из слов подходящим в качестве пароля пользователя. Ненадежные пароли, такие как "Yankees" или "Mustang", могут быть подобраны очень быстро. Более надежные пароли, такие как "?You'L1N3vaFiNdMeyeP@sSWerd!", взломать значительно сложнее. Система защиты паролей должна наблюдать за тем, чтобы пользователи выбирали надежные пароли.

Надежный пароль является сложным (содержащим сочетание прописных, строчных, числовых и специальных символов) и не является словом. В этом примере демонстрируется проверка сложности.

Пример

Код

''' <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

Компиляция кода

Вызовите этот метод путем передачи строки, содержащей этот пароль.

Для этого примера необходимо следующее.

Безопасность

При перемещении пароля по сети необходимо использовать безопасный метод передачи данных. Дополнительные сведения см. в разделе ASP.NET Web Application Security.

Можно улучшить точность функции ValidatePassword, добавив дополнительные проверки сложности.

  • Сравните пароль и его подстроки с именем пользователя, идентификатором пользователя и словарем, определяемым приложением. Кроме того, можно рассматривать визуальный вид символов как эквивалент при выполнении сравнений. Например, можно рассматривать буквы "l" и "e" как эквиваленты цифр "1" и "3".

  • Если имеется только один символ верхнего регистра, убедитесь, что это не первый знак пароля пользователя.

  • Убедитесь, что последние два символа пароля — буквы.

  • Не допускайте пароли, в которых все символы введены из верхнего ряда клавиатуры.

См. также

Ссылки

Regex

Другие ресурсы

ASP.NET Web Application Security