Page 1 sur 2

Modification de son propre mot de passe

Posté : 16 juin 2011, 14:29
par lolo76
Bonjour à tous !


Voilà, je voudrais que les gens qui se connectent au site puissent changer leur propre mot de passe et j'y suis presque !
Mon souci est que si je veux que ma requête soit prise en compte, je dois entrer mon ID en dur dans mon sql comme ceci:
$sql="UPDATE `users` SET `password`='".$password."' WHERE `id`=[color=#FF0000]19[/color] LIMIT 1" ;
$resultat=@mysql_db_query($dbname,$sql,$id_link);
Je vois envois tout le code qui en dépend....
INDEX.PHP (connexion)

Code : Tout sélectionner

if (isset($_POST['nom'])) { if ($_POST['nom']!="Deconnexion") { $sql="select * from users where nom like '".$_POST['nom']."' and password like '".$_POST['password']."' LIMIT 1"; $resultat=@mysql_db_query($dbname,$sql,$id_link); if (@mysql_num_rows($resultat)==0) { $motdepasse="KO"; } else { $rang=mysql_fetch_array($resultat); $motdepasse="OK"; $iduser=$rang['id']; $nomuser=$rang['prenomuser']; $habged=$rang['habged']; $habfds=$rang['habfds']; $habmail=$rang['habmail']; $habuser=$rang['habuser']; $habadm=$rang['habadm']; session_register("iduser"); session_register("motdepasse"); session_register("nomuser"); session_register("habged"); session_register("habfds"); session_register("habmail"); session_register("habuser"); session_register("habadm"); } } else { $motdepasse=""; $habfds=""; $habged=""; $habmail=""; $habuser=""; $habadm=""; $iduser=""; $nomuser=""; session_register("motdepasse"); session_register("habged"); session_register("habfds"); session_register("habmail"); session_register("habadm"); session_register("iduser"); session_register("habuser"); session_register("nomuser"); } } ?>
CHANGEPWD.PHP

Code : Tout sélectionner

<script language="javascript" type="text/javascript"> function validation() { if(document.changepwd.password1.value == "") { alert ('Le mot de passe est vide !'); document.changepwd.password1.focus(); return false; } if(document.changepwd.password1.value != document.changepwd.password2.value) { alert ('Les mots de passe ne correspondent pas !'); document.changepwd.password1.value = ""; document.changepwd.password2.value = ""; document.changepwd.password1.focus(); return false; } else {return true;} } </script> <form name="changepwd" action="index.php?prog=changepwd2.php" method="post" onsubmit="return validation();"> <table> <tr> <td valign="top">Entrer votre nouveau mot de passe :</td> <td><input type="password" name="password1" size="40" maxlength="40"></td> </tr> <tr> <td valign="top">confirmer votre nouveau mot de passe :</td> <td><input type="password" name="password2" size="40" maxlength="40"></td> </tr> </table><BR><input type="submit" value="Modifier"></form>

CHANGEPWD2

Code : Tout sélectionner

<?php session_start(); $iduser=$_POST['iduser']; $password=$_POST['password1']; $sql="UPDATE `users` SET `password`='".$password."' WHERE `id`=????? LIMIT 1" ; $resultat=@mysql_db_query($dbname,$sql,$id_link); ?> <center>Mot de passe modifié</center>

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 14:40
par Mazarini
Bonjour,

Je t'invite à essayer de te connecter en mettant ' OR '1' = '1 comme mot de passe (solution : http://php.net/manual/fr/function.mysql ... string.php)

Pour ton problème, pourquoi tu n'utilise pas $_SESSION['iduser'] ?

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 14:56
par Invité
J'y avais pensé en plus pour le $_SESSION je l'ai pas fait car j'étais à bout de nerf ><
merci beaucoup :D .


Ceci dit, pourquoi et où utiliser 'OR '1'=' 1 ?

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:01
par Mazarini
A la place de saisir ton mot de passe lorsque tu te connectes. Sauf erreur de ma part ca doit marcher comme mot de passe. Tu peux mettre n'importe quel nom d'utilisateur avec ce mot de passe.

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:09
par Invité
Ah ouais en effet, ca me connecte en tant qu'admin.

C'est pas un peu problèmatique ? si quelqu'un le sait et qu'il se connecte alors qu'il n'en a pas les droits ?

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:14
par Mazarini
C'est une faille connue par beaucoup. Avec la démonstration, je pense que tu vas te méfier maintenant.

La fonction mysql_real_escape_string() permet de résoudre ce problème. Il faut l'utiliser pour toute les données issue d'une saisie, pas seulement pour la connexion.

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:15
par moogli
clairement ta requet SQL va être

select * from users where nom like 'truc' and password like '' or '1'='1' LIMIT 1

ce qui sera toujours vrai car le or à la fin ben il est toujours vrai (si sis la chaine 1 c'est égale à la chaine 1, ça aussi avec bob ou marcel ;) ).

Après quel est le problème ?

on met le nom de n'importe qui est on se connecte avec son compte sans aucune soucis ;) (et pour faire vraiment ce que l'on veux on regarde aqui appartient et zou ton site ne t'appartient plus ;) ).

la fonction indiqué par mazarini (mysql_real_escape_string) permet "d'échapper" les caractères spéciaux de mysql et donc d'éviter ce type de soucis.
la requete deviendrait
select * from users where nom like 'truc' and password like '\' or \'1\'=\'1' LIMIT 1
et donc myqsl va chercher un mot de passe identique à ' or '1'='1, qu'il ne devrait pas trouver ;)

autre chose, pourquoi utilise like ? il est utile en cas de recherche "partielle" pas dans ce cas l'équalité et la chose à utiliser
select * from users where nom='truc' and password = 'mdp' LIMIT 1
deplus j'ajouterais que la limite n'est pas utile, si tu a plus d'une réopnse c'est que tu a merdé la vérification à l'inscription ;) (ça ne doit pas arriver si c'est le merdier).

dernière chose, petite remarque sur la fonction session_register
Avertissement

Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.
je t'invite donc a lire ce tuto relatant de la chose :)

edit : bordel je suis trop long a taper :/

@+

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:37
par Mazarini
Long à taper, mais beaucoup plus clair.

Enfin, je pense que l'on aura convaincu un programmeur de l'utilité du mysql_real_escape_string(). C'est une journée productive.

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:40
par Invité
Certe, vous m'avez complètement convainqu !

Maintenant je cherche à ce que ca marche^^
Et finalement le $_SESSION n'a pas fonctionné, il fonctionnait que pour moi bizarement...

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:55
par Invité
Après de nombreux test, le mot de passe se change mais uniquement sur l'ID 19 meme si je me connecte avec un autre utilisateur.

Pourtant ma requete est la suivante:

Code : Tout sélectionner

session_start(); $iduser=$_SESSION['iduser']; $password=$_POST['password1']; $sql="UPDATE `users` SET `password`='".$password."' WHERE `id`='".$iduser."' LIMIT 1" ;

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 15:57
par Mazarini
Et si tu fais afficher l'id juste après la connexion et juste avant la modification du mot de passe ?


Dans ton premier post, je voie :
<?php
session_start();
$iduser=$_POST['iduser'];
$password=$_POST['password1'];


$sql="UPDATE `users` SET `password`='".$password."' WHERE `id`=????? LIMIT 1" ;
$resultat=@mysql_db_query($dbname,$sql,$id_link);
?>
<center>Mot de passe modifié</center>
ne faut il pas mettre $iduser=$_SESSION['iduser'];
ou ajouter un input hidden dans le formulaire de changement de mot de passe ?

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 16:08
par Invité
Juste après la connexion il me met ID=32 jusque là tout va bien...

Juste avant de changer de mot de passe, rien ne s'affiche,
et une fois changé ID=19

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 16:10
par Invité
Oui je l'ai remplacé depuis, maintenant j'ai bien $iduser=$_SESSION['iduser'];

désolé pour le double post

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 16:34
par Mazarini
Il faut que tu cherches ou tu peux mettre 19 dans la variable et que tu contrôles les affectations de la variable.

Mets des "echo" dans ton script pour essayer de suivre, de mon coté, je n'ai rien vu.

Re: Modification de son propre mot de passe

Posté : 16 juin 2011, 16:41
par Invité
Je ne trouve rien pour le moment, je trouve ca vraiment bizare qu'il soit figé comme ca sur cet ID.

Le cache ou quelque chose de ce genre pourrait avoir un rapport avec tout ca ?