Modification inopinée d'un mot de passe dans ma bdd

Eléphanteau du PHP | 43 Messages

14 juin 2009, 18:57

Salut,

Je ne sais pas si c'est dû à un problème de session, de base de données ou autre, mais que ce soit en local ou en ligne, il arrive parfois que le hashage de mon mot de passe dans ma bdd (et uniquement cette colonne), se modifie tout seul. C'est assez rare mais le seul fait que ça puisse arriver, est très gênant car le membre ne peut plus se connecter alors qu'il saisi bien son mot de passe.

Bon, je ne suis vraiment pas sûre mais je crois me souvenir que ça arrive quand je fais des mises à jour de fichiers, alors peut-être que certains fichiers, une fois modifiés, provoquent cette modification, et que c'est peut-être pour ça que ça le fait rarement.

Mais quand même, ça m'épatonne parce que ça m'est arrivé hier, après avoir modifié un fichier qui contient des requêtes pour un système d'affichage de pseudo de membres et visiteurs en ligne, et la seule requête qui touche à la table des membres, n'est qu'un SELECT qui ne récupère que leur id et pseudo, donc je ne vois pas ce qui irait changer le mot de passe. À moins que le problème soit à cause d'une requête sur carrément un autre fichier commun à toutes les pages. On m'a conseiller de vérifier toutes les requêtes mais ça va faire un peu beaucoup quand même... :? .

J'aimerais donc savoir si quelqu'un a eu un problème similaire et pourrait me renseigner sur sa méthode utilisée pour le résoudre.

D'avance merci :) .
Clicky

Eléphanteau du PHP | 29 Messages

15 juin 2009, 01:55

Salut,
quel type de fonction utilises tu pour le hachage?

ViPHP
ViPHP | 1136 Messages

15 juin 2009, 07:56

Salut ,

Il te faut effectivement vérifier toutes tes requêtes qui touchent à ta table ( que ce soit un select ou update ).

Une chose qui m'étonne , comment vois tu que les mdp sont changés ?
Ils ne sont pas cryptés :?

Ch.

Eléphanteau du PHP | 43 Messages

15 juin 2009, 09:41

Salut,

Merci pour vos réponses.

À Wolfgang : j'utilise un type de fonction de hashage classique, mais je vois pas trop l'importance que ça peut avoir.. :roll:

À stopher : je vois que mon mdp a changé dans la bdd, via phpmyadmin, il est hashé bien sûr et la chaine qui le remplace est elle aussi un hashage, visiblement et ce qui m'étonne, c'est que c'est toujours le même à chaque fois que ça se produit. Et surtout, ça peut se produire n'importe quant et peu importe les pages que j'appelle.. C'est très soudain en fait.
Je m'aperçois qu'il a changé quand mon système de comparaison (commun à toutes les pages) me déconnecte :? .
Clicky

Eléphanteau du PHP | 29 Messages

15 juin 2009, 12:31

salut,
effectivement, en fait, sans aucune visibilité sur ton code, on ne peux pas dire d'où pourrait venir l'erreur. Peut être qu'il est possible que tu nous montres comment tu t'y prends pour enregistrer le mot de passe, une fois que tu l'as crypté; voire toutes les fonctions qui "tape" dans cette table (update,insert). Par ce que pour ce genre de problème, c'est du cas pour cas. Dans tous les cas je te souhaite une bonne journée.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 juin 2009, 14:06

Il te faut effectivement vérifier toutes tes requêtes qui touchent à ta table ( que ce soit un select ou update ).
Sur le select, le risque est faible quand même ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 29 Messages

15 juin 2009, 14:11

oui, je suis d'accord, mais je ne pense pas qu'il y ai qu'une seule fonction select, il y a bien une fonction permettant au moins l'insertion, et peut être un update. Je sais bien qu'avec un select, c'est impossible que la bdd soit modifié à cause de cela. :).
Mais il y a bien quelque chose qui est lié à ce changement, dans la base, sauf si la base n'a subis aucun changement :roll: . Mais, il est vrai que sans une visu sur du code, on ne peut pas trop aider.

Eléphanteau du PHP | 43 Messages

15 juin 2009, 14:43

Pour l'enregistrement du mdp dans la bdd, je procède de manière classique en fait :
<?php
mysql_query("
		INSERT INTO site_membres (membre_id, membre_ip, membre_host, membre_pseudo, membre_email, membre_mdp, 
		membre_sexe, membre_localisation, membre_msn, membre_site_web, membre_signature, 
		membre_jour_naiss, membre_mois_naiss, membre_annee_naiss, membre_hobby, 
		membre_date_inscrit, membre_derniere_visite) 
		VALUES ('".intval($id_aleat)."', '".$membre_ip."', '".$host."', '".$pseudo."', '".$email."' , '".$mdp."', '".$sexe."', 
		'".$localisation."' , '".$msn."', '".$site_web."', '".$signature."', '".$jour_naiss."', 
		'".$mois_naiss."', '".$annee_naiss."', '".$hobby."', '".$temps."' , '".$temps."') ") 
		or die ("Erreur sql insert into ".mysql_error());
?>
Mais une fois connectée, je ne reviens jamais sur cette page, de même pour les autres requêtes qui y sont et qui touchent à ma table de membres, elles ne s'exécutent pas si je n'y vais pas. Je pense que si c'est un problème de requête qui se fait mal, c'est peut-être dans un fichier inclus à toutes les pages mais là encore, le problème se produirait à chaque page visitée, et pas que de temps en temps à la visite d'une page quelconque. (Puis, je ne vais pas vous montrer toutes les requêtes de mon site, y en a beaucoup trop.)

Et surtout, ça ne se produit que sur mon hashage (j'ai deux autres inscriptions de test), vu qu'il n'y a toujours que moi qui suit connectée (le site est toujours en période de test, en local comme en ligne), personne d'autre n'y a accès.

C'est comme si quelqu'un ou quelque chose avait accès à mes phpmyadmin (local et en ligne) et me changeait mon hashage uniquement. Ce qui me fait penser que ça viendrait peut-être d'un problème au niveau des sessions.

En haut de toutes mes pages, pour l'instant j'ai ceci :
<?php
session_cache_limiter('private');
session_start();
?>
et je compte mettre private_no_expire à la place de private.

Merci, bonne journée de même :) .

Edit : Bon en fait, je crois avoir résolu le problème qui venait de la requête qui modifie les infos du profil. Dans le traitement, j'ai un système qui détecte s'il y a eu changement de mot de passe ou non, mais la requête qui modifiait toutes les infos, modifiait aussi le mdp, même s'il n'était pas modifié par le membre (donc le champ étant resté vide). Du coup, le hashage se faisait sur une chaine vide, d'où le hashe de remplacement qui était tout le temps le même... Je l'ai reconnu en faisant des tests à part.

Donc, dans mon système de détection de mdp, j'ai ajouter une condition dans laquelle j'ai une variable qui contient la requête avec l'update du mdp s'il n'est pas vide, et dans le cas où il est vide, j'ai cette même variable qui contient la même requête mais sans l'update du mdp.
J'ai donc mis cette variable dans mysql_query() et hop, magie, mon mdp n'est plus changé quand je ne le modifie pas dans le formulaire !

Je n'ai donc pas eu besoin de vérifier toutes mes requêtes \:D/ , j'avais déjà quelques doutes concernant cette requête et ce n'était pas du tout à cause de mise à jour de fichiers finalement O:) .

En tout cas, merci de vous être penché sur mon problème ;) .
Clicky