
Comprobe a forza do contrasinal con JavaScript ou jQuery e expresións regulares (tamén con exemplos do servidor!)
Estiven a investigar sobre como atopar un bo exemplo dun comprobador de forza de contrasinal que use JavaScript Expresións regulares (Rex). Na aplicación do meu traballo, volvemos facer unha publicación para verificar a forza do contrasinal e é bastante inconveniente para os nosos usuarios.
Que é Regex?
Unha expresión regular é unha secuencia de caracteres que definen un patrón de busca. Normalmente, estes patróns úsanse por algoritmos de busca de cadeas para atopar or atopar e substituír operacións en cadeas ou para validación de entrada.
Este artigo definitivamente non é para ensinarche expresións regulares. Só ten que saber que a posibilidade de usar expresións regulares simplificará absolutamente o seu desenvolvemento mentres busca patróns no texto. Tamén é importante ter en conta que a maioría das linguaxes de desenvolvemento optimizaron o uso de expresións regulares ... así que en vez de analizar e buscar cadeas paso a paso, Regex adoita ser moito máis rápido tanto no servidor coma no cliente.
Busquei bastante na web antes de atopalo un exemplo dalgunhas grandes expresións regulares que buscan unha combinación de lonxitude, caracteres e símbolos. Non obstante, o código era un pouco excesivo para o meu gusto e adaptado para .NET. Entón simplifiquei o código e poñoo en JavaScript. Isto fai que valide a forza do contrasinal en tempo real no navegador do cliente antes de publicalo de novo... e ofrece algúns comentarios ao usuario sobre a forza do contrasinal.
Escribe un contrasinal
Con cada golpe de teclado, o contrasinal compróbase contra a expresión regular e, a continuación, proporciónaselle comentarios ao usuario nun espazo debaixo dela.
Función de fortaleza do contrasinal de JavaScript
o Expresións regulares facer un traballo fantástico para minimizar a lonxitude do código. Esta función de Javascript comproba a solidez dun contrasinal e se frustralo é fácil, medio, difícil ou extremadamente difícil de adiviñar. A medida que a persoa escribe, mostra consellos para fomentar que sexa máis forte. Valida o contrasinal baseándose en:
- lonxitude – Se a lonxitude é inferior ou superior a 8 caracteres.
- Caso Mixto – Se o contrasinal ten maiúsculas e minúsculas.
- Números – Se o contrasinal inclúe números.
- Personaxes especiais – Se o contrasinal inclúe caracteres especiais.
A función mostra a dificultade, así como algúns consellos para reforzar aínda máis o contrasinal.
function checkPasswordStrength(password) {
// Initialize variables
var strength = 0;
var tips = "";
// Check password length
if (password.length < 8) {
tips += "Make the password longer. ";
} else {
strength += 1;
}
// Check for mixed case
if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {
strength += 1;
} else {
tips += "Use both lowercase and uppercase letters. ";
}
// Check for numbers
if (password.match(/\d/)) {
strength += 1;
} else {
tips += "Include at least one number. ";
}
// Check for special characters
if (password.match(/[^a-zA-Z\d]/)) {
strength += 1;
} else {
tips += "Include at least one special character. ";
}
// Return results
if (strength < 2) {
return "Easy to guess. " + tips;
} else if (strength === 2) {
return "Medium difficulty. " + tips;
} else if (strength === 3) {
return "Difficult. " + tips;
} else {
return "Extremely difficult. " + tips;
}
}
Se queres actualizar a cor da punta, tamén podes facelo actualizando o código despois de // Return results
liña.
// Get the paragraph element
var strengthElement = document.getElementById("passwordStrength");
// Return results
if (strength < 2) {
strengthElement.textContent = "Easy to guess. " + tips;
strengthElement.style.color = "red";
} else if (strength === 2) {
strengthElement.textContent = "Medium difficulty. " + tips;
strengthElement.style.color = "orange";
} else if (strength === 3) {
strengthElement.textContent = "Difficult. " + tips;
strengthElement.style.color = "black";
} else {
strengthElement.textContent = "Extremely difficult. " + tips;
strengthElement.style.color = "green";
}
Función de fortaleza do contrasinal de jQuery
Con jQuery, en realidade non temos que escribir o formulario cunha actualización oninput:
<form>
<label for="password">Enter password:</label>
<input type="password" id="password">
<p id="password-strength"></p>
</form>
Tamén podemos modificar a cor das mensaxes se o desexamos.
$(document).ready(function() {
$('#password').on('input', function() {
var password = $(this).val();
var strength = 0;
var tips = "";
// Check password length
if (password.length < 8) {
tips += "Make the password longer. ";
} else {
strength += 1;
}
// Check for mixed case
if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {
strength += 1;
} else {
tips += "Use both lowercase and uppercase letters. ";
}
// Check for numbers
if (password.match(/\d/)) {
strength += 1;
} else {
tips += "Include at least one number. ";
}
// Check for special characters
if (password.match(/[^a-zA-Z\d]/)) {
strength += 1;
} else {
tips += "Include at least one special character. ";
}
// Update the text and color based on the password strength
var passwordStrengthElement = $('#password-strength');
if (strength < 2) {
passwordStrengthElement.text("Easy to guess. " + tips);
passwordStrengthElement.css('color', 'red');
} else if (strength === 2) {
passwordStrengthElement.text("Medium difficulty. " + tips);
passwordStrengthElement.css('color', 'orange');
} else if (strength === 3) {
passwordStrengthElement.text("Difficult. " + tips);
passwordStrengthElement.css('color', 'black');
} else {
passwordStrengthElement.text("Extremely difficult. " + tips);
passwordStrengthElement.css('color', 'green');
}
});
});
Endurecendo a súa solicitude de contrasinal
É esencial que non valide só a construción do contrasinal no seu Javascript. Isto permitiría a calquera persoa con ferramentas de desenvolvemento do navegador ignorar o script e empregar o contrasinal que lle gustaría. SEMPRE debería empregar unha verificación do servidor para validar a intensidade do contrasinal antes de gardalo na súa plataforma.
Función PHP para fortalecer o contrasinal
function checkPasswordStrength($password) {
// Initialize variables
$strength = 0;
// Check password length
if (strlen($password) < 8) {
return "Easy to guess";
} else {
$strength += 1;
}
// Check for mixed case
if (preg_match("/[a-z]/", $password) && preg_match("/[A-Z]/", $password)) {
$strength += 1;
}
// Check for numbers
if (preg_match("/\d/", $password)) {
$strength += 1;
}
// Check for special characters
if (preg_match("/[^a-zA-Z\d]/", $password)) {
$strength += 1;
}
// Return strength level
if ($strength < 2) {
return "Easy to guess";
} else if ($strength === 2) {
return "Medium difficulty";
} else if ($strength === 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
Función de Python para fortalecer o contrasinal
def check_password_strength(password):
# Initialize variables
strength = 0
# Check password length
if len(password) < 8:
return "Easy to guess"
else:
strength += 1
# Check for mixed case
if any(char.islower() for char in password) and any(char.isupper() for char in password):
strength += 1
# Check for numbers
if any(char.isdigit() for char in password):
strength += 1
# Check for special characters
if any(not char.isalnum() for char in password):
strength += 1
# Return strength level
if strength < 2:
return "Easy to guess"
elif strength == 2:
return "Medium difficulty"
elif strength == 3:
return "Difficult"
else:
return "Extremely difficult"
Función C# para reforzar o contrasinal
public string CheckPasswordStrength(string password) {
// Initialize variables
int strength = 0;
// Check password length
if (password.Length < 8) {
return "Easy to guess";
} else {
strength += 1;
}
// Check for mixed case
if (password.Any(char.IsLower) && password.Any(char.IsUpper)) {
strength += 1;
}
// Check for numbers
if (password.Any(char.IsDigit)) {
strength += 1;
}
// Check for special characters
if (password.Any(ch => !char.IsLetterOrDigit(ch))) {
strength += 1;
}
// Return strength level
if (strength < 2) {
return "Easy to guess";
} else if (strength == 2) {
return "Medium difficulty";
} else if (strength == 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
Función Java para reforzar o contrasinal
public String checkPasswordStrength(String password) {
// Initialize variables
int strength = 0;
// Check password length
if (password.length() < 8) {
return "Easy to guess";
} else {
strength += 1;
}
// Check for mixed case
if (password.matches(".*[a-z].*") && password.matches(".*[A-Z].*")) {
strength += 1;
}
// Check for numbers
if (password.matches(".*\\d.*")) {
strength += 1;
}
// Check for special characters
if (password.matches(".*[^a-zA-Z\\d].*")) {
strength += 1;
}
// Return strength level
if (strength < 2) {
return "Easy to guess";
} else if (strength == 2) {
return "Medium difficulty";
} else if (strength == 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
E se só estás a buscar un xenial xerador de contrasinais, creei unha pequena ferramenta en liña para iso.
Atopei outros comprobadores de seguridade de contrasinal. O seu algoritmo baseado no dicionario de palabras. Proba un en microsoft.com - http://www.microsoft.com/protect/yourself/password/checker.mspx e un en itsimpl.com - http://www.itsimpl.com
GRAZAS! GRAZAS! GRAZAS! Levo 2 semanas tomeando co maldito código de seguridade do contrasinal doutros sitios web e estirándome o pelo. O teu é curto, funciona como eu quero e, o mellor de todo, é fácil de modificar para un novato en JavaScript. Quería capturar o veredicto de forza e non deixar que o formulario publicase para actualizar realmente o contrasinal do usuario a menos que cumprise a proba de forza. O código doutras persoas era demasiado complicado ou non funcionaba ben ou outra cousa. Quérote! XXXXX
Es Benvido! Es Benvido! Es Benvido!
Eu tamén te quero!
Grazas por escribir un anaco de código que fai exactamente o que di na lata.
Ola, en primeiro lugar, moitas grazas polos teus esforzos, tentei usalo con Asp.net pero non funcionou, estou usando
en vez de etiquetar, e non funcionou, algunha suxestión?!
Para Nisreen: o código do cadro resaltado non funciona cun cortar e pegar. A comiña simple está desordenada. O código da ligazón de demostración está ben.
Ola, gústame o teu guión! Traducínoo ao holandés e publiqueino no meu foro aquí!
gran traballo! exactamente como se debe facer no cliente
moi bo traballo....
Grazas Douglas, úsoo para o meu traballo actual.
"P@s$w0rD" móstrase forte, aínda que se rompería bastante rápido cun ataque de dicionario...
Para implementar tal función nunha solución profesional, creo que é importante combinar este algoritmo cunha comprobación de dicionario.
Funciona moi ben en XULRunner cun pouco de cambios. Grazas!
Grazas por este pequeno código, agora podo usalo para probar a forza do meu contrasinal cando os meus visitantes introducen os seus contrasinais,
Gran peza de codificación
O guión era estupendo. Eu usara no noso proxecto actual
Grazas por compartir!
Expresión tan sinxela e fantástica. Eu como probador derivei os meus TC desta expresión.
Grazas por compartilo. Tes algunhas ligazóns rotas nesta páxina. FYI.
Alguén pode dicir, por que non funcionou o meu..
Copiei todo o código e pegueo no bloc de notas++, pero non funciona en absoluto?
por favor axúdame..
Fantástico!!!!! Grazas.
Gran traballo rapaz! Simple e eficaz. Moitas grazas por compartilo!
grazas
Ben, grazas. Pero... Cal é un exemplo de PW FORTE? 'non podo atopar un!-{}
Este tipo de "comprobador de forza" leva á xente por un camiño moi perigoso. Valora a diversidade de caracteres sobre a lonxitude da frase de acceso, o que o leva a valorar os contrasinais máis curtos e diversos como máis fortes que os contrasinais máis longos e menos diversos. Esa é unha falacia que meterá aos teus usuarios en problemas se algunha vez se enfrontan a unha seria ameaza de piratería.
Non estou en desacordo, Jordan! O exemplo foi simplemente posto como un exemplo do guión. A miña recomendación para as persoas é utilizar unha ferramenta de xestión de contrasinais para crear frases de acceso independentes para calquera sitio que sexan exclusivos del. Grazas!
grazas funciona moi ben.
Grazas funciona ben
Estou moi agradecido de que esteas buscado moitas veces, pero finalmente recibín a túa publicación e estou moi sorprendido. GRAZAS
Grazas compañeiro. Acabo de implementar no meu sitio web e está funcionando moi ben.
Encántame escoitar iso! Benvido sexas!
Agradezo que compartas! Estiven buscando reforzar a forza do contrasinal do noso sitio web e este funcionou como eu quería. Moitas grazas!
Grazas, espero que poidas personalizala segundo sexa necesario.
Vostede é un aforrador en directo! Estaba analizando cadeas esquerda dereita e centro e pensei que había un xeito mellor e atopei o teu código usando Regex. Puido tocar con el para o meu sitio... Non tes idea de canto axudou isto. Moitas grazas Douglas!!
Estupendo escoitalo!