Le moyen le plus simple de sécuriser votre système de stockage de mots de passe consiste à en utilisant une bibliothèque standard .
Étant donné que la sécurité est généralement beaucoup plus compliquée et que les possibilités d'erreurs invisibles sont plus nombreuses que celles auxquelles la plupart des programmeurs pourraient s'attaquer seuls, l'utilisation d'une bibliothèque standard est presque toujours l'option la plus simple et la plus sûre (si ce n'est la seule).
La nouvelle API PHP pour les mots de passe (5.5.0+)
Si vous utilisez la version 5.5.0 de PHP ou une version plus récente, vous pouvez utiliser la nouvelle API de hachage de mot de passe simplifiée.
Exemple de code utilisant l'API de mot de passe de PHP :
<?php
// $hash is what you would store in your database
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT, ['cost' => 12]);
// $hash would be the $hash (above) stored in your database for this user
$checked = password_verify($_POST['password'], $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
(Si vous utilisez toujours la version 5.3.7 ou une version plus récente, vous pouvez installer le logiciel suivant ircmaxell/password_compat pour avoir accès aux fonctions intégrées)
Améliorer les hachages salés : ajouter du poivre
Si vous voulez une sécurité supplémentaire, les spécialistes de la sécurité recommandent maintenant (2017) d'ajouter un ' poivre ' aux hachages de mots de passe (automatiquement) salés.
Il existe une classe simple qui implémente ce modèle de manière sécurisée, que je recommande : Netsilik/Mots de passe poivrés ( github ).
Il est livré avec une licence MIT, vous pouvez donc l'utiliser comme bon vous semble, même dans des projets propriétaires.
Exemple de code utilisant Netsilik/PepperedPasswords
:
<?php
use Netsilik/Lib/PepperedPasswords;
// Some long, random, binary string, encoded as hexadecimal; stored in your configuration (NOT in your Database, as that would defeat the entire purpose of the pepper).
$config['pepper'] = hex2bin('012345679ABCDEF012345679ABCDEF012345679ABCDEF012345679ABCDEF');
$hasher = new PepperedPasswords($config['pepper']);
// $hash is what you would store in your database
$hash = $hasher->hash($_POST['password']);
// $hash would be the $hash (above) stored in your database for this user
$checked = $hasher->verify($_POST['password'], $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
La bibliothèque standard OLD
Veuillez noter : vous ne devriez plus avoir besoin de ça ! C'est seulement ici pour des raisons historiques.
Jetez un coup d'oeil : Cadre portable de hachage de mots de passe en PHP : phpass et assurez-vous d'utiliser le CRYPT_BLOWFISH
algorithme si possible.
Exemple de code utilisant phpass (v0.2) :
<?php
require('PasswordHash.php');
$pwdHasher = new PasswordHash(8, FALSE);
// $hash is what you would store in your database
$hash = $pwdHasher->HashPassword( $password );
// $hash would be the $hash (above) stored in your database for this user
$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
PHPass a été implémenté dans certains projets bien connus :
- phpBB3
- WordPress 2.5+ ainsi que bbPress
- la version Drupal 7, (module disponible pour Drupal 5 & 6)
- autres
La bonne nouvelle, c'est que vous n'avez pas à vous soucier des détails, ceux-ci ayant été programmés par des personnes expérimentées et examinés par de nombreuses personnes sur Internet.
Pour plus d'informations sur les systèmes de stockage des mots de passe, lisez Jeff `s blog post : Vous stockez probablement vos mots de passe de manière incorrecte.
Quoi qu'il en soit, si vous optez pour le Je vais le faire moi-même, merci. approche, ne pas utiliser MD5
o SHA1
plus . Ce sont de bons algorithmes de hachage, mais ils sont considérés comme étant brisé pour des raisons de sécurité .
Actuellement, l'utilisation de crypte avec CRYPT_BLOWFISH est la meilleure pratique.
CRYPT_BLOWFISH en PHP est une implémentation du hachage Bcrypt. Bcrypt est basé sur l'algorithme de chiffrement par blocs Blowfish, qui utilise une clé coûteuse pour ralentir l'algorithme.
0 votes
Note : php 5.4+ intègre cette fonctionnalité.
0 votes
Voir également la page de l'Openwall Cadre de hachage de mots de passe en PHP (PHPass). Il est portable et renforcé contre un certain nombre d'attaques courantes sur les mots de passe des utilisateurs.
1 votes
Obligatoirement "utiliser AOPs au lieu de l'interpolation de chaînes", pour les personnes qui tombent sur cette question aujourd'hui.