Sécuriser des mots de passe en PHP (password_hash & password_verify)

PrimFX Boris ('PrimFX') Le 23 janvier 2022

Depuis sa version 5.5, PHP intègre un ensemble de fonctions permettant de hacher et vérifier le hash de mots de passe. Dans cette vidéo, je vous propose de découvrir comment stocker les mots de passe de vos utilisateurs de façon sécurisée avec les fonctions PHP password_hash() et password_verify().

Ressources utiles :

Code du tuto :

  • Création de la table "users" en SQL :
CREATE TABLE users (id int primary key auto_increment, email varchar(255) not null, password varchar(255) not null, createdAt datetime not null default NOW());
  • index.php
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Inscription/Connexion</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

    <form method="POST" action="register.php">
        <input type="email" placeholder="Email" name="email"><br>
        <input type="password" placeholder="Mot de passe" name="password"><br>
        <button type="submit">Inscription</button>
    </form>

    <hr>

    <form method="POST" action="login.php">
        <input type="email" placeholder="Email" name="email"><br>
        <input type="password" placeholder="Mot de passe" name="password"><br>
        <button type="submit">Connexion</button>
    </form>
    
</body>
</html>
  • register.php
<?php
require('./db.php');

if (!empty($_POST['email']) && !empty($_POST['password'])) {
    $email = $_POST['email'];
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

    var_dump($email);
    var_dump($password);

    $q = $db->prepare('INSERT INTO users (email, password) VALUES (:email, :password)');
    $q->bindValue('email', $email);
    $q->bindValue('password', $password);
    $res = $q->execute();

    if ($res) {
        echo "Inscription réussie";
    }
}
  • login.php
<?php
require('./db.php');

if (!empty($_POST['email']) && !empty($_POST['password'])) {
    $email = $_POST['email'];
    $password = $_POST['password'];

    var_dump($email);
    var_dump($password);

    $q = $db->prepare('SELECT * FROM users WHERE email = :email');
    $q->bindValue('email', $email);
    $q->execute();
    $res = $q->fetch(PDO::FETCH_ASSOC);
    
    var_dump($res);
    
    if ($res) {
        $passwordHash = $res['password'];
        if (password_verify($password, $passwordHash)) {
            echo "Connexion réussie !";
        } else {
            echo "Identifiants invalides";
        }
    } else {
        echo "Identifiants invalides";
    }
}

 


A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 1

  • totoro Le 1 avril, à 02:50 | Répondre

    Super, tu reprends les tutos php?
    C'est super !

    merci chef