Corser un mot de passe

Résolu
janyduchemin - 25 août 2021 à 12:46
 janyduchemin - 25 août 2021 à 13:29
Bjr la communauté,
Suite à une formation que j'ai suivi, j'ai utilisé la fonction:
(public static function hashPassword($pass){
return sha1(SALT.md5($pass.SALT).sha1(SALT));
}
)
pour crypter le mot de passe du fichier de connexion. Aujourd'hui je voudrais ajouter: au moins chiffre, une majuscule ceci grace à la fonction preg_match je ne sais donc pas si cela est possible
voila mon fichier signup.php
<?php
require 'includes/includes.php';


//récupération PROPRE des variables AVANT de les utiliser
$email = !empty($_POST['email']) ? addslashes(trim($_POST['email'])) : "";
$password = !empty($_POST['password']) ? addslashes(trim($_POST['password'])) : "";
$nom_prenom = !empty($_POST['nom_prenom']) ? addslashes($_POST['nom_prenom']) : "";
$ville = !empty($_POST['ville']) ? addslashes($_POST['ville']) : "";


if (!empty($_POST['email'])) {

  if (!empty($_POST['password']) && ( filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) )) {

    $password = Auth::hashPassword($password);
    $token = sha1(uniqid(rand()));

    $reponse = $DB->uniqueEmail($email);

    if ($reponse != 0) {
      $_SESSION['erreur'] = "Adresse email déja utilisée par un membre.";
    } else {

      $createUser = $DB->createUser($nom_prenom, $ville, $email, $password, $token);
      if ($createUser) {
        //envoi d'email.
        $mail_to = $email;
        $mail_subject = " Validation de votre compte !!";
        $headers = "From : Ndameyong\r\n";
        $headers .= "Reply-To:***@*** \r\n";
        $headers .= "MIME-Version 1.0\r\n";
        $headers .= "Content-type: text/html;charset=utf-8\r\n";
        $mail_body = 'Bonjour <br/> Veuillez ciquer sur <a href="http://localhost/ndameyong/activate.php?token=' . $token . '&email=' . $email . '"> le lien </a>pour activer votre compte ';

        if (mail($mail_to, $mail_subject, $mail_body, $headers)) {
          $_SESSION['message'] = " Un émail a été envoyé a votre méssagerie avec des instructions pour activer votre compte ";
          unset($_POST);
        } else {
          $_SESSION['erreur'] = "Un problème est survenu lors de l'envoi d'email !.";
        }
      } else {
        echo "Erreur lors de la création de l'utilisateur !";
        exit('Error!!!');
       
      }
    }
  } else {
    if (empty($_POST['password'])) {
      $erreur_password = 'Un mot de passe est requis !.';
      $_SESSION['erreur'] = ' Veuillez corriger les érreurs .';
    }

    if (empty($_POST['email'])) {
      $erreur_email = 'Le champs email est requis !';
      $_SESSION['erreur'] = ' Veuillez corriger les érreurs .';
    } else
    if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
      $erreur_email = 'Adresse Email non valide !';
      $_SESSION['erreur'] = ' Veuillez corriger les érreurs .';
    }
  }
}
?>

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- reponsive meta-->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Création de compte || Ndameyong - L'Ecole des Langues Camerounaises</title>

    <!-- Font Icon -->
    <link rel="icon" type="image/png" sizes="16x16" href="favicon/favicon-16x16.png">
    <link rel="stylesheet" href="fonts/material-icon/css/material-design-iconic-font.min.css">

    <!-- Main css -->
    <link rel="stylesheet" href="css/signup.css">

  </head>
  <body>

    <!-- message de session -->
    <?php if (isset($_SESSION['message'])): ?>
      <div class="message"> <?php echo $_SESSION['message']; ?></div>
      <?php unset($_SESSION['message']) ?>
    <?php endif ?>
    <?php if (isset($_SESSION['erreur'])): ?>
      <div class="errorMessage"> <?php echo $_SESSION['erreur']; ?></div>
      <?php unset($_SESSION['erreur']) ?>
<?php endif ?>

    <div class="main">
      <section class="signup">
          <!-- <img src="images/signup-bg.jpg" alt=""> -->
        <div class="container">
          <div class="signup-content">

            <form action="" method="post" id="signup">
              <h2 class="form-title"><a href="index.php"><span class ="moi">accueil du site</span></span></a></h2>

              <div class="form-group">
                <input type="text" class="form-input" name="nom_prenom" id="nom_prenom" value="<?php echo $nom_prenom; ?>" 
                       placeholder="Nom & Prénom"/>
              </div>

              <div class="form-group">
                <input type="text" class="form-input" name="ville" id="ville" value="<?php echo $ville; ?>" 
                       placeholder="Ville de Résidence"/>
              </div>
              <div class="form-group">
                <input type="email" class="form-input" class="required" name="email" id="email" value="<?php echo $email; ?>" placeholder="Votre E-mail"/>
              </div>
              <?php if (!empty($erreur_email)): ?>
                <div class="error"><?php echo $erreur_email; ?></div> 
<?php endif ?>

              <div class="form-group">
                <input type="Password" class="form-input" class="required" name="password" id="password" placeholder="Password"/>
                <span toggle="#password" class="zmdi zmdi-eye field-icon toggle-password"></span>
              </div>

              <?php if (!empty($erreur_password)): ?>
                <div class="error"><?php echo $erreur_password; ?></div> 
<?php endif ?>

              <p class="information">* Tous les champs sont requis</p>
              <div class="form-group">
                <input type="checkbox" name="agree-term" id="agree-term" class="agree-term" />
                <label for="agree-term" class="label-agree-term"><span><span></span></span>Je m'inscris et je deviens membre de l'association Ndameyong  
                  <a href="statut_reglement.php" class="term-service">Statut & Règlement</a></label>
              </div>

              <div class="form-group">
                <input type="submit" name="submit" id="submit" class="form-submit" value="Sign up"/>
              </div>
            </form>
            <p class="loginhere">
              Déja Membre ? <a href="login.php" class="loginhere-link">Connecte-toi ici</a>
            </p>
          </div>
        </div>
      </section>

    </div>

    <!-- JS -->
    <script src="vendor/jquery/jquery.min.js"></script>
    <script src="js/main.js"></script>
  </body>
</html>


et mon fichier auth.php
<?php 

/**
* Auth
*/
class Auth{
	
	public static function islog($db){
		if(isset($_SESSION['user']) && isset($_SESSION['user']['email'])  && isset($_SESSION['user']['password'])){

			$data =array(
				'email'=>$_SESSION['user']['email'],
				'password'=>$_SESSION['user']['password']
				
				);
			
			$sql = 'SELECT * FROM users WHERE email=:email AND password=:password limit 1';
			$req = $db->tquery($sql,$data);

			if(!empty($req)){
				return true;
			}
		}
		return false;
	}


	public static function hashPassword($pass){

		return sha1(SALT.md5($pass.SALT).sha1(SALT));
	}


	public static function isadmin($db){
		if(isset($_SESSION['user']['role']) && (Auth::hashPassword('admin')  == $_SESSION['user']['role'])){
			return true;
		}
		return false;
	}

 
	public function deleteuser($id){
	   $sql = 'DELETE FROM users WHERE id=:id';
	   $data = [':id'=>$id]; 
	   return  $DB->exec($sql , $data) ;
	}

	
	
}

merci!
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
25 août 2021 à 13:22
Bonjour,

Si tu veux vérifier la présence de certains caractères dans le mot de passe en php avec preg_match(), il faut donc construire une expression régulière qui correspond aux caractères autorisées.
Si tu veux apprendre à créer toi même cette regex (expression régulière), tu peux suivre un des nombreux tutos disponibles en ligne (un au hasard avec des exemples : https://www.zendevs.xyz/les-expressions-regulieres-en-php-regex/.
Si tu n'arrives pas à créer la regex attendue, tu devrais également trouver pleins d'exemples via ton moteur de recherche favoris avec les termes "php password preg_match".

Enfin rien à voir avec la demande initiale mais la formation suivi ne semble pas très à jour, quelques remarques en vrac :
- sha1 ou md5 ne sont pas recommandés pour sécuriser les mots de passe, tu devrais plutôt utiliser la fonction php password_hash() (et password_verify() pour vérifier le mdp) disponible depuis PHP 5.5 (2013).
- Pourquoi utiliser addslashes() lors de la récupération des variables ? Si c'est pour éviter les injections sql, il faudrait plutôt utiliser les requêtes préparées avec PDO dans la fonction createUser() si ce n'est pas déjà le cas. A part altérer les données, addslashes() ne semble pas utile ici.
- Il faudrait utiliser htmlentities() lors de la concaténation des variables php dans le corps du mail html et lors de l'affichage des variables php dans le document html pour éviter les failles xss
0
janyduchemin
25 août 2021 à 13:29
Merci!
0