Gérer les mots de passe

Dans le cas d’un formulaire d’authentification, le mot de passe doit être géré correctement. Un mot de passe utilisateur ne doit jamais être stocké en clair que ce soit dans un fichier ou dans une base de données. Il sera haché avant le stockage et une fonction de contrôle du mot de passe sera utilisée.

Cryptage VS Hachage

Pour rappel, le cryptage permet un chiffrement basé sur un algorithme et il est possible de retrouver l’origine (donc décryptage). Le hachage, quant à lui, se base aussi sur un algorithme et compose une empreinte de longueur fixe, irréversible. Il est impossible de retrouver l’origine.

De plus, dans le hachage, il est possible d’ajouter un sel pour sécuriser d’avantage l’empreinte et rendre de plus en plus difficile la création de rainbow table.

Il est recommandé que le mot de passe d’origine suive une policy (ex : chiffre, minuscule, majuscule, caractères spéciaux, etc.).

Hacher un mot de passe

PHP a une méthode permettant de hacher un mot de passe en utilisant un algorithme avec sel intégré.

password_hash("Mot de passe à hacher", algorithme à utiliser);
password_hash("toto!1234", PASSWORD_BCRYPT);
// $2y$10$UqpPCefjmclTg7X7VCr/Ke/n3o58d9VJM50DWqtrIXp8XJD3R4/8G

Vérification d’un mot de passe

Lors d’un formulaire de connexion, l’utilisateur rentrera toujours son mot de passe en clair. De notre côté, nous aurons stocké seulement l’empreinte. Pour les comparer, une fonction de PHP doit être utilisée.

$passwordUser = "toto!1234";
$hash = "$2y$10$UqpPCefjmclTg7X7VCr/Ke/n3o58d9VJM50DWqtrIXp8XJD3R4/8G";

password_verify($passwordUser, $hash); // Retourne un booléan