Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este método comprueba algunas características de una contraseña segura y actualiza un parámetro de cadena con información sobre en qué comprobaciones falla la contraseña.
Las contraseñas se pueden usar en un sistema seguro para autorizar a un usuario. Sin embargo, las contraseñas deben ser difíciles de adivinar a los usuarios no autorizados. Los atacantes pueden usar un programa de ataque de diccionario , que recorre en iteración todas las palabras de un diccionario (o varios diccionarios en diferentes idiomas) y comprueba si alguna de las palabras funciona como contraseña de un usuario. Las contraseñas débiles como "Yankees" o "Mustang" se pueden adivinar rápidamente. Contraseñas más seguras, como "?You'L1N3vaFiNdMeyeP@sSWerd!", son mucho menos probables que se adivinen. Un sistema protegido con contraseña debe asegurarse de que los usuarios elijan contraseñas seguras.
Una contraseña segura es compleja (que contiene una combinación de mayúsculas, minúsculas, numéricas y caracteres especiales) y no es una palabra. En este ejemplo se muestra cómo comprobar la complejidad.
Ejemplo
Código
''' <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
Compilación del código
Llame a este método pasando la cadena que contiene esa contraseña.
Este ejemplo requiere:
- Acceso a los miembros del System.Text.RegularExpressions espacio de nombres. Agregue una instrucción
Imports
si no hay nombres de miembros completos en el código. Para obtener más información, consulte Instrucción Imports (Tipo y espacio de nombres de .NET).
Seguridad
Si va a mover la contraseña a través de una red, debe usar un método seguro para transferir datos. Para obtener más información, consulte ASP.NET Seguridad de aplicaciones web.
Puede mejorar la precisión de la ValidatePassword
función agregando comprobaciones de complejidad adicionales:
Compare la contraseña y sus subcadenas con el nombre del usuario, el identificador de usuario y un diccionario definido por la aplicación. Además, trate caracteres visualmente similares como equivalentes al realizar las comparaciones. Por ejemplo, trate las letras "l" y "e" como equivalentes a los números "1" y "3".
Si solo hay un carácter en mayúsculas, asegúrese de que no sea el primer carácter de la contraseña.
Asegúrese de que los dos últimos caracteres de la contraseña son caracteres de letra.
No permita contraseñas en las que se escriban todos los símbolos desde la fila superior del teclado.