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 :
- En savoir plus sur les mécanismes de hachage, chiffrement, encodage :
- Documentation PHP md5
- Documentation PHP hash
- Documentation PHP - Article / FAQ sur le hachage de mots de passe
- Documentation PHP password_hash
- Documentation PHP password_verify
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";
}
}
Votre commentaire