J'essaie de déterminer quelle est la sécurité utilisée par défaut par Drupal 6/7 pour stocker les mots de passe. Est-ce MD5, AES, SHA? J'ai été incapable de trouver quoi que ce soit.
Drupal 8 et Drupal 7 utilisent SHA512 par défaut avec un sel. Ils exécutent le hachage via la fonction hash de PHP à plusieurs reprises pour augmenter le coût de calcul de la génération du hachage final d'un mot de passe (technique de sécurité appelée stretching ).
Avec Drupal 8, la mise en œuvre est orientée objet. Il existe un PasswordInterface qui définit une méthode de hachage. L'implémentation par défaut de cette interface est dans la classe PhpassHashedPassword . La méthode hash de cette classe appelle la méthode crypt en transmettant SHA512 en tant qu'algorithme de hachage, mot de passe et sel généré. La méthode crypt de la classe est presque identique à la méthode _password_crypt () de Drupal 7.
Avec Drupal 7, l’implémentation est divisée en deux fonctions globales: user_hash_password () et _password_crypt () .
Drupal 6 utilise MD5 sans sel. La fonction pertinente est user_save () .
Voici un exemple de hash de Drupal 7:
"pass": "$ S $ Dxl65W9p07LfQU7jvy5CnsyDpMoLujiAgzy123khcg1OJi/P9pKS"
Les caractères 0-2 sont le type ($ S $ est Drupal 7)
Le résultat binaire est ensuite converti en chaîne à l'aide de base64.
$ count = 1 << $ count_log2;
$ hash = hash ($ algo, $ salt. $ password, TRUE);
do {$ hash = hash ($ algo, $ hash. $ password, TRUE);
} while (- $ count);
L'ensemble du processus se trouve dans: Mydrupalsite\includes\password.inc
Il peut être vérifié dans www\includes\password.inc
function user_check_password($password, $account) {
if (substr($account->pass, 0, 2) == 'U$') {
// This may be an updated password from user_update_7000(). Such hashes
// have 'U' added as the first character and need an extra md5().
$stored_hash = substr($account->pass, 1);
$password = md5($password);
}
else {
$stored_hash = $account->pass;
}
$type = substr($stored_hash, 0, 3);
switch ($type) {
case '$S$':
// A normal Drupal 7 password using sha512.
$hash = _password_crypt('sha512', $password, $stored_hash);
break;
case '$H$':
// phpBB3 uses "$H$" for the same thing as "$P$".
case '$P$':
// A phpass password generated using md5. This is an
// imported password or from an earlier Drupal version.
$hash = _password_crypt('md5', $password, $stored_hash);
break;
default:
return FALSE;
}
return ($hash && $stored_hash == $hash);
}
Il a été clairement écrit que "// Un mot de passe Drupal 7 normal utilisant sha512."
C'est MD5 et si je comprends bien, aucun salage n'est utilisé. Edit - c'est drupal 6. Pour drupal 7, un hachage plus avancé est utilisé. Un bon article à ce sujet ici - http://joncave.co.uk/2011/01/password-storage-in-drupal-and-wordpress/
drupal 8 utilise Phpass (version modifiée)
drupal 7 utiliser SHA-512 + sel
drupal 6 et la version précédente utilisaient md5 sans sel