Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo metodo verifica la presenza di alcune caratteristiche della password complessa e aggiorna un parametro stringa con informazioni su quali controlli la password ha esito negativo.
Le password possono essere usate in un sistema sicuro per autorizzare un utente. Tuttavia, le password devono essere difficili da indovinare per gli utenti non autorizzati. Gli attaccanti possono usare un programma di attacco dizionario, che esamina tutte le parole di un dizionario (o più dizionari in lingue diverse) e verifica se una delle parole funziona come password dell'utente. È possibile indovinare rapidamente password deboli come "Yankees" o "Mustang". Password più forti, come "?You'L1N3vaFiNdMeyeP@sSWerd!", sono molto meno probabilmente indovinabili. Un sistema protetto da password deve garantire che gli utenti scelgano password complesse.
Una password complessa è complessa (contenente una combinazione di caratteri maiuscoli, minuscoli, numerici e speciali) e non è una parola. In questo esempio viene illustrato come verificare la complessità.
Esempio
Codice
''' <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
Compilare il codice
Chiamare questo metodo passando la stringa che contiene la password.
Questo esempio richiede:
- Accesso ai membri dello spazio dei nomi System.Text.RegularExpressions. Aggiungi la dichiarazione
Importsse non qualifichi completamente i nomi dei membri nel tuo codice. Per ulteriori informazioni, vedere Istruzione Imports (spazio dei nomi .NET e tipo).
Sicurezza
Se si sposta la password in una rete, è necessario usare un metodo sicuro per il trasferimento dei dati. Per altre informazioni, vedere ASP.NET Web Application Security.
È possibile migliorare l'accuratezza della ValidatePassword funzione aggiungendo controlli di complessità aggiuntivi:
Confrontare la password e le relative sottostringhe con il nome dell'utente, l'identificatore utente e un dizionario definito dall'applicazione. Considerare inoltre caratteri visivamente simili come equivalenti durante l'esecuzione dei confronti. Ad esempio, considerare le lettere "l" e "e" come equivalenti ai numeri "1" e "3".
Se è presente un solo carattere maiuscolo, assicurarsi che non sia il primo carattere della password.
Assicurarsi che gli ultimi due caratteri della password siano caratteri di lettera.
Non consentire password in cui tutti i simboli vengono immessi dalla riga superiore della tastiera.