Fermer

décembre 26, 2022

Vérifiez la force du mot de passe avec JavaScript et des expressions régulières (avec des exemples côté serveur, aussi !)


Je faisais des recherches pour trouver un bon exemple de vérificateur de force de mot de passe qui utilise Javascript et Expressions régulières (Regex). Dans l’application à mon travail, nous faisons un retour pour vérifier la force du mot de passe et c’est assez gênant pour nos utilisateurs.

Qu’est-ce que l’expression régulière ?

Une expression régulière est une séquence de caractères qui définit un modèle de recherche. Habituellement, ces modèles sont utilisés par des algorithmes de recherche de chaînes pour trouver ou alors trouver et remplacer opérations sur les chaînes ou pour la validation des entrées.

Cet article n’est certainement pas pour vous apprendre les expressions régulières. Sachez simplement que la possibilité d’utiliser des expressions régulières simplifiera absolument votre développement lorsque vous recherchez des modèles dans le texte. Il est également important de noter que la plupart des langages de développement ont optimisé l’utilisation des expressions régulières… donc plutôt que d’analyser et de rechercher des chaînes étape par étape, Regex est généralement beaucoup plus rapide à la fois côté serveur et côté client.

J’ai pas mal cherché sur le net avant de trouver un exemple de certaines grandes expressions régulières qui recherchent une combinaison de longueur, de caractères et de symboles. Cependant, le code était un peu excessif à mon goût et adapté à .NET. J’ai donc simplifié le code et l’ai mis en JavaScript. Cela lui permet de valider la force du mot de passe en temps réel sur le navigateur du client avant de le publier… et fournit des informations à l’utilisateur sur la force du mot de passe.

Tapez un mot de passe

À chaque coup de clavier, le mot de passe est testé par rapport à l’expression régulière, puis un retour d’information est fourni à l’utilisateur dans une plage en dessous.

Voici le code

Le Expressions régulières faire un travail fantastique en minimisant la longueur du code. Cette fonction Javascript vérifie la force d’un mot de passe et si le déjouer est facile, moyen, difficile ou extrêmement difficile à deviner. Au fur et à mesure que la personne tape, il affiche des conseils pour l’encourager à être plus fort. Il valide le mot de passe en fonction de :

  • Longueur – Si la longueur est inférieure ou supérieure à 8 caractères.
  • Cas mixte – Si le mot de passe comporte à la fois des caractères majuscules et minuscules.
  • Nombres – Si le mot de passe comprend des chiffres.
  • Caractères spéciaux – Si le mot de passe comprend des caractères spéciaux.

La fonction affiche la difficulté ainsi que quelques conseils pour renforcer davantage le mot de passe.

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;
  }
}

Durcissement de votre demande de mot de passe

Il est essentiel que vous ne vous contentiez pas de valider la construction du mot de passe dans votre Javascript. Cela permettrait à toute personne disposant d’outils de développement de navigateur de contourner le script et d’utiliser le mot de passe de son choix. Vous devez TOUJOURS utiliser une vérification côté serveur pour valider la force du mot de passe avant de le stocker sur votre plateforme.

Fonction PHP pour la force du mot de passe

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";
  }
}

Fonction Python pour la force du mot de passe

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"

Fonction C# pour la force du mot de passe

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";
  }
}

Fonction Java pour la force du mot de passe

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";
  }
}




Source link

décembre 26, 2022