このメソッドは、いくつかの強力なパスワード特性をチェックし、パスワードが失敗したチェックに関する情報で文字列パラメーターを更新します。
パスワードは、セキュリティで保護されたシステムでユーザーを承認するために使用できます。 パスワードは、承認されていないユーザーが推測しにくいものでなければなりません。 攻撃者は 辞書攻撃 プログラムを使用できます。辞書内のすべての単語 (または異なる言語の複数の辞書) を反復処理し、単語のいずれかがユーザーのパスワードとして機能するかどうかをテストします。 「ヤンキース」や「マスタング」などの脆弱なパスワードはすぐに推測できます。 "より強力なパスワード、たとえば「?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
コードをコンパイルする
そのパスワードを含む文字列を渡して、このメソッドを呼び出します。
この例では、次のものが必要です。
-
System.Text.RegularExpressions名前空間のメンバーへのアクセス。 コードでメンバー名を完全に修飾していない場合は、
Imports
ステートメントを追加します。 詳細については、「 Imports ステートメント (.NET 名前空間と型)」を参照してください。
安全
ネットワーク経由でパスワードを移動する場合は、セキュリティで保護された方法を使用してデータを転送する必要があります。 詳細については、「 ASP.NET Web アプリケーションのセキュリティ」を参照してください。
さらに複雑さのチェックを追加することで、 ValidatePassword
関数の精度を向上させることができます。
パスワードとその部分文字列を、ユーザーの名前、ユーザー識別子、およびアプリケーション定義ディクショナリと比較します。 さらに、比較を実行するときに、視覚的に似た文字を同等として扱います。 たとえば、文字 "l" と "e" を数字 "1" と "3" と等価として扱います。
大文字が 1 文字しかない場合は、パスワードの最初の文字ではないことを確認します。
パスワードの最後の 2 文字が文字であることを確認します。
キーボードの先頭行からすべての記号を入力するパスワードは許可しないでください。
こちらも参照ください
.NET