Générer un Hash de Mot de Passe Sécurisé avec Laravel Tinker

Tim
September 22nd, 2024
image description

Imaginez un instant : vous développez tranquillement une application avec Laravel. Vous avez créé un mot de passe à la va-vite, un peu trop simple, et maintenant, avec un peu plus de recul, vous vous dites qu'il serait temps de le sécuriser. Problème : pour le changer dans phpMyAdmin, il vous faut un mot de passe haché. Si vous vous reconnaissez dans ce cas de figure, aujourd'hui, nous allons droit au but et ne pas faire de passe décisive ⚽. Aujourd'hui, on va voir comment générer un mot de passe sécurisé avec Laravel Tinker et le modifier directement dans phpMyAdmin. Let's go!

Utiliser Laravel Tinker pour générer le hachage d'un mot de passe

Laravel Tinker est un outil puissant qui vous permet d’interagir avec votre application en mode console. Pour y accéder, il suffit de lancer la commande artisan suivante : php artisan tinker. Une fois à l'intérieur de commande, pour générer un mot de passe d’utilisateur, il suffit d’utiliser la fonction PHP bcrypt :

shell
>>> $password = bcrypt('MonMotDePasse');
>>> echo $password;
$2y$10$92IXUNpkjO0rS5tb0/Jgde/2.OG906.1/thJhvxMCQ.Kv09TWSFW

Explication du code :

  • bcrypt('MonMotDePasse') : cette ligne utilise la fonction bcrypt pour hacher le mot de passe “VotreMotDePasse”. A vrai dire, c'est la partie clé. Tuto fini ! Sans blague. Mais ne partez pas, lisez la suite.

  • echo $password; : affiche le mot de passe haché (hashed). En appuyant sur entrer lors de la première commande, il y a de forte chance que le mot de passe haché soit déjà affiché.

Pourquoi utiliser bcrypt ?

bcrypt est un algorithme de hachage unidirectionnel, ce qui signifie qu’il est impossible de récupérer le mot de passe original à partir de la version hachée. Il s’agit de la meilleure pratique pour sécuriser les mots de passe des utilisateurs dans votre application. Regardez cela comme si quelqu'un avait récupéré votre carte bancaire, mais qu'il n'a pas le code en clair, mais à la place un code indescriptible. Il a certes la carte en main, mais il ne pourra pas s'en servir directement. La sécurité, c'est important, c'est comme dans la vraie vie.

On sait faire le hachage, mais quel mot de passe hacher justement ?

Générer un mot de passe aléatoire avec Str::random

Voici une solution quick and dirty comme diraient les Anglo-Saxons. Laravel fournit la fonction Str::random qui permet de générer des chaînes de caractères aléatoires :

shell
>>> $password = Str::random(12) . '!@#$%^&*';
>>> echo $password;
X3v5Lq8D9T7P

Explication du code :

  • Str::random(12) : cette ligne génère une chaîne de caractères aléatoire de 12 caractères. Vous pouvez modifier la longueur de la chaîne en modifiant le paramètre 12.

  • C'est rapide, ça fait le travail, mais le problème, c'est que ce n'est pas sécurisé. D'ailleurs, qu'est-ce qu'un mot de passe sécurisé ?

Voici quelques conseils non exhaustifs pour générer un mot de passe fort :

  • Utilisez une longueur de mot de passe suffisante. Douze (12) caractères ou plus est idéal.

  • Utilisez un mélange de caractères majuscules, minuscules, chiffres et symboles.

  • Évitez les mots de passe faciles à deviner. On l'a tous fait : mot-de-passe, 0000, 1234, etc.

  • Ne réutilisez pas le même mot de passe pour différents comptes. Je sais, on le fait tous aussi celui-là.

  • Utilisez un gestionnaire de mots de passe pour stocker vos mots de passe en toute sécurité. C'est d'ailleurs ce que nous allons voir tout de suite.

Ce n'est pas suffisamment sécurisé pour des usages sensibles. Voyons une version améliorée qui prend en compte les meilleures pratiques pour générer des mots de passe robustes.

Amélioration pour générer un mot de passe sécurisé :

Pour obtenir un mot de passe solide et unique, copiez les lignes ci-dessous (ligne 2 à 13) dans votre invite de commande Laravel Tinker. Vous devriez ainsi obtenir un mot de passe robuste :

php
<?php
$letters = Str::random(6); // 6 lettres aléatoires
$uppercase = Str::upper(Str::random(2)); // 2 lettres majuscules aléatoires
$lowercase = Str::lower(Str::random(2)); // 2 lettres minuscules aléatoires
$symbols = '!@#$%^&*()'; // Liste de caractères spéciaux
$specialChars = substr(str_shuffle($symbols), 0, 2); // 2 caractères spéciaux aléatoires

// Combinez tous les composants
$password = $letters . $uppercase . $lowercase . $specialChars;

// Mélange aléatoirement l'ordre des caractères
$password = str_shuffle($password);
echo $password;

Le code génère un mot de passe sécurisé de 12 caractères (libre à vous de modifier) en combinant plusieurs éléments aléatoires :

  1. Génération de lettres aléatoires :

    • Str::random(6) crée six lettres aléatoires qui servent de base au mot de passe.

  2. Majuscules et minuscules :

    • Str::upper(Str::random(2)) génère deux lettres majuscules pour ajouter de la complexité.

    • Str::lower(Str::random(2)) produit deux lettres minuscules, contribuant à un bon mélange de casse.

  3. Caractères spéciaux :

    • Une chaîne de symboles (par exemple, !@#$%^&*()) est définie pour inclure des caractères spéciaux dans le mot de passe.

    • substr(str_shuffle($symbols), 0, 2) mélange aléatoirement cette chaîne de symboles et en sélectionne deux au hasard pour augmenter la sécurité.

  4. Combinaison et mélange :

    • Tous les composants sont combinés en une seule chaîne.

    • str_shuffle($password) mélange de nouveau les caractères de la chaîne résultante pour s'assurer qu'il n'y a pas de schéma prévisible.

  5. Affichage du mot de passe :

    • echo $password; affiche le mot de passe final généré.

Ces étapes garantissent que le mot de passe est long, diversifié et imprévisible, ce qui est essentiel pour une bonne sécurité. Bien, maintenant qu'on a les bases et qu'on sait faire cela nous même, voyons comment on peut utiliser des services prêts à l'emploi pour faire ce qu'on vient de faire, mais en mieux.

Super Saiyan 3 ⚡ : Utiliser un générateur de mots de passe en ligne

Il existe de nombreux générateurs de mots de passe en ligne disponibles. Vous pouvez simplement copier le mot de passe généré et le coller dans votre application. Il y en a beaucoup, je vous laisse faire une petite recherche Google, mais moi, j'utilise personnellement un gestionnaire de mot de passe : Bitwarden. Et ce dernier propose un générateur de mot de passe. Le problème, comme avec notre méthode précédente, c'est que le mot de passe fournit est impossible à mémoriser de tête. Mais c'est le jeu, et celui-ci en vaut surement la chandelle. Il faut trouver le meilleur compromis entre sécurité et aisance à l'utilisation. Une fois ce mot de passe robuste en main, vous revenez au début de l'article, et vous le mettez dans Tinker, et voilà !

En conclusion :

Générer des mots de passe sécurisés est essentiel pour protéger vos utilisateurs. N’hésitez pas à utiliser les méthodes et les outils que nous avons vus ensemble pour générer des mots de passe forts et difficiles à deviner. N’oubliez pas que la sécurité de vos utilisateurs est une priorité absolue !

Maintenant que vous avez appris à générer des mots de passe sécurisés, n’hésitez pas à expérimenter avec les différentes méthodes.