SÉCURISEZ VOS MOTS DE PASSE EN PHP
You must be registered for see images attach
Aujourd'hui nous allons voir comment sécuriser vos mots de passe en PHP.
You must be registered for see images attach
INTRODUCTION
Note : Veuillez à ne pas confondre cryptage et hashage. Le cryptage est réversible, le hashage ne l'est pas.
You must be registered for see images attach
HASHER UN MOT DE PASSE
Pour hasher un mot de passe, c'est très simple.
PHP propose une fonction nommée password_hash pour hasher des chaînes de caractères.
Exemple :
PHP:
$pass = 'RealityGaming' ;
$hash = password_hash($pass,PASSWORD_BCRYPT);
Le résultat de ma variable $hash ne sera jamais le même résultat.
PASSWORD_BCRYPT est une constante, il y a une autre constante qui est : PASSWORD_DEFAULT, mais celle-ci n'est pas recommandée (elle fait référence à l'algorithme par défaut de PHP).
Une liste des constantes disponibles se trouve
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
. La fonction password_hash possède un troisième argument, celui de spécifier des options pour l'algorithme.
Nous l'exprimerons comme ceci :
PHP:
$pass = 'RealityGaming' ;
$hash = password_hash($pass,PASSWORD_BCRYPT,['cost' => 10]);
Dans cet exemple on augmente le coût (cost) de l'algorithme le rendant par la même occasion plus lente et donc plus dure à « brute-forcer ».
Vous pouvez déterminer le « coût idéal » grâce à une fonction trouvée sur le net.
PHP:
function getOptimalCost($timeTarget)
{
$cost = 9;
do {
$cost++;
$start = microtime(true);
password_hash("RealityGaming", PASSWORD_BCRYPT, ["cost" => $cost]);
$end = microtime(true);
} while (($end - $start) < $timeTarget);
return $cost;
}
echo getOptimalCost(0.3);
Il existe également l'option « sel » (salt), qui permet de générer ses propres grains de sel.
Je ne conseille pas d'utiliser cette fonction, car mal utilisée elle pourrait réduire la sécurité du hash.
Voici un schéma expliquant ce que je viens de dire.
You must be registered for see images attach
You must be registered for see images attach
COMPARER UN MOT DE PASSE ET UN HASH
Comme dit plus haut, le résultat d'un hash n'est jamais le même, alors comment comparer ce résultat avec le mot de passe initial saisit par l'utilisateur ?

Heureusement pour nous, PHP possède une fonction nommée password_verify.
Nous l'utiliserons comme ceci :
PHP:
if(password_verify('RealityGaming', '$2y$10$nQWnPp/DAAz0Z41/zydo1.9pIKqQMmvGXj9XagxA0lIngdZ29eauW')) echo 'OK';
else echo 'ERREUR';
Le résultat est OK, car le hash que j'ai fourni est le résultat de :
PHP:
echo $hash;
You must be registered for see images attach
VÉRIFIER UN HASH
Avec le temps, il se peut qu'un hash ne fonctionne plus, car vous avez augmenté le coût par exemple.
Avec une fonction PHP, vous pouvez avoir toutes les informations sur un hash. Cette fonction se nomme password_get_info.
Nous l'utilisons comme ceci :
PHP:
print_r(password_get_info($hash));
Cela affichera le type d'algorithme ainsi que les options que vous avez utilisées :
PHP:
Array
(
[algo] => 1
[algoName] => bcrypt
[options] => Array
(
[cost] => 11
)
)
C'est pratique d'avoir ces valeurs, mais PHP dispose d'une fonction qui vérifie la validité d'un hash en fonction des options que vous voulez !
Cette fonction se nomme : password_needs_rehash.
Voici un exemple d'utilisation :
PHP:
$pass = 'RealityGaming' ;
$hash = password_hash($pass,PASSWORD_BCRYPT,['cost' => 11]);
$options = array('cost' => 11);
if (password_verify($pass, $hash))
{
if (password_needs_rehash($hash, PASSWORD_BCRYPT, $options))
{
$hash = password_hash($pass, PASSWORD_BCRYPT, $options);
}
}
You must be registered for see images attach
FIN DU TUTORIEL
Vous n'avez plus d'excuses pour stocker vos mots de passes tels quels maintenant, faites attention aux données sensibles de vos utilisateurs.
PS : Je vous ai présenté uniquement les méthodes basiques, il y a beaucoup d'autres méthodes, comme le sha256, sha1, md5 ..

RealityGaming Tech