web-dev-qa-db-fra.com

importer des utilisateurs dont le mot de passe est fourni sous la forme md5 + beaucoup de métadonnées

J'ai un tableur qui m'a été fourni d'utilisateurs à importer sur un nouveau site que j'ai construit. On m'a fourni le mot de passe sous forme de hachage MD5. Je suppose que si j'insère ceci dans le champ de mot de passe de la base de données, puisqu'il s'agit de MD5, il correspondra toujours à leur mot de passe lorsque l'utilisateur essaiera de se connecter au nouveau système. est-ce une supposition correcte?

J'ai également une grande quantité de métadonnées à insérer pour chaque utilisateur.

Parce que je veux insérer la chaîne md5, et non le texte du mot de passe et les champs méta personnalisés supplémentaires, je ne pense pas pouvoir utiliser wp_insert_user.

Est-ce que quelqu'un a de l'expérience avec ce genre de chose? Je pense que je vais juste faire quelque chose directement dans mysql, plutôt que de pirater un plugin WP, toutes les suggestions seraient les bienvenues.

2
benstraw

WordPress utilisait MD5 pour le hachage du mot de passe dans le passé, mais avait depuis lors opté pour un phpass plus sécurisé. La bonne chose est qu’elle conserve la compatibilité avec les versions antérieures. Si l’utilisateur avait l’ancien hachage MD5, il serait alors vérifié comme tel, puis automatiquement haché et ré-enregistré à l’aide de l’algorithme en cours, voir wp_check_password() .

Vous avez raison de ne pas pouvoir utiliser wp_insert_user() car le mot de passe en texte brut est attendu.

4
Rarst

J'ai eu ce problème aussi. J'ai fini par résoudre le problème en important les mots de passe MD5 sous forme de texte en clair, puis en modifiant l'authentification Wordpress pour qu'elle mette les mots de passe sous un hachage MD5 avant de les vérifier.

Mon approche spécifique:

  1. J'ai utilisé un plug-in pour importer des utilisateurs à partir d'un fichier CSV contenant leur mot de passe MD5-ed. Cela m'a laissé avec une base de données pleine d'utilisateurs incapables de se connecter, parce que leur mot de passe en clair était maintenant "5f4dcc3b5aa765d61d8327deb882cf99" au lieu de "mot de passe".

  2. Ensuite, j'ai écrit un plug-in comportant de minuscules modifications apportées à wp_hash_password () et à wp_check_password () afin que le hachage MD5 soit la première étape de toutes les vérifications de mot de passe. Ainsi, lorsqu'ils entrent "mot de passe", WordPress vérifie plutôt "5f4dcc3b5aa765d61d8327deb882cf99" et la vérification de l'authentification réussit. J'ai toujours le même cryptage phpass, la seule différence est que je ne lui donne jamais de texte brut à chiffrer.

Cela a été accompli en copiant-collant ces fonctions de pluggable.php dans un nouveau plug-in et en les modifiant pour envelopper les mots de passe en texte clair fournis dans md5 ().

Chaque fonction ne comportait qu'un changement par rapport à l'implémentation d'origine; cette ligne de la fonction wp_hash_password ():

return $wp_hasher->HashPassword( trim( $password ) );

à:

return $wp_hasher->HashPassword(  md5 ( trim( $password ) ) );

et cette ligne de la fonction wp_check_password ():

$check = $wp_hasher->CheckPassword($password, $hash);

à:

$check = $wp_hasher->CheckPassword(md5($password), $hash);

Avec cette approche, les utilisateurs doivent conserver leurs mots de passe de manière transparente. Au lieu de compromettre la sécurité, nous pouvons utiliser une version encore plus sécurisée du schéma d'authentification prêt à l'emploi.

0
Umopepisdn

Comme Rarst l'a dit, si vous insérez le hachage MD5 directement dans la base de données pour chaque utilisateur, le mot de passe existant md5 fonctionnera .

Si quelqu'un recherche une requête de base de données pour mettre à jour le mot de passe pour tous les utilisateurs, utilisez le code suivant après avoir inséré l'utilisateur.

global $wpdb;

$user_id = wp_insert_user($user_data);

$result = $wpdb->update( 
    $wpdb->users,
    array( 'user_pass' => $user_pass ),
    array( 'ID' => $user_id )
);
0
Deepak Rajpal

J'imagine que si j'insère ceci dans le champ du mot de passe de la base de données, puisqu'il s'agit de MD5, son mot de passe correspondra quand l'utilisateur tentera de se connecter au nouveau système. Est-ce une supposition correcte?

Vérifiez le code source de votre version wordpress FIRST pour le vérifier. Il se peut que ce ne soit pas le comportement par défaut. Vérifiez donc le code source et effectuez un piratage rapide de votre installation (mettez-le sous GIT , de sorte que vous ayez à annuler la tâche en cours d’édition du commencez par git init). Cela ne tuera pas un seul chaton mais augmentera votre flux de travail BTW).

Donc, après avoir résolu votre problème de connexion (Solution: ajoutez une vérification au hash MD5, le cas échéant, régénérez le hash du mot de passe avec phpass ), vous pouvez penser sur le problème des métadonnées.

Ma réponse ne couvre pas beaucoup. Je veux dire, il suffit d'ajouter les données d'une manière ou d'une autre, cela devrait être trivial. Ajoutez-le simplement. Si les données sont incompatibles avec votre site, vous devrez peut-être d'abord agrandir votre site. Par conséquent, quelle que soit la transaction, je suis sûr que vous l'aurez gérée.

Astuce: Insérez directement dans la base de données. Il suffit de faire une requête MySQL qui fait le travail. Ne bougez pas trop avec le code wordpress PHP. Wordpress ne connait que la base de données MySQL pour stocker les données. Donc, si vous contrôlez les données, vous contrôlez wordpress;).

0
hakre