Modification de son propre mot de passe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Modification de son propre mot de passe

Re: Modification de son propre mot de passe

par moogli » 16 juin 2011, 16:57

une piste pour t'aider :
suivant la conf de php et le register globals, si tu des variables avec le même nom dans des "context" différents (get, post, cookie, session)il est posible qu'elles s'écrasent (parce qu'il y a un mécanisme qui priorise et "évite" le souk, paramètre variables_order dans le php.ini).

par exemple l'ordre par défaut est EGPCS soit Environnement => GET => POST => COOKIE => SERVER (regarde la doc pour plus d'info).

ceci couplé au register_globals à on tu peux avoir des surprise, car tes variables vont être "auto déclarées", c'est adire que $_GET['iduser'] va devenir $iduser, mais que $_POST['iduser'] aussi etc etc. C'est la que le variables order viens remettre de l'odre dans tous cela et au final $iduser vaut ...................... $_POST['iduser'].

le truc c'est que $_SESSION['iduser'] aussi c'est $iduser et que le mécanisme marque dans les deux sens. c'est a dire que si $_SESSION['iduser'] == $iduser et bien $iduser==$_SESSION['iduser'] :fete: et que donc lorsque tu définis $iduser sur une page (qui n'a rien a voir pourquoi pas) et bien viens modifier le $_SESSION['iduser'] et la certain te dirais dt*** :/

ce cas est peu fréquent mais arrive (en changeant e nom de la variable de session tu verra cic'est cela tu peux juste ajouter ou enlever un _ ;) )


@+

Re: Modification de son propre mot de passe

par Invité » 16 juin 2011, 16:41

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 ?

Re: Modification de son propre mot de passe

par Mazarini » 16 juin 2011, 16:34

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

par Invité » 16 juin 2011, 16:10

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

par Invité » 16 juin 2011, 16:08

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

par Mazarini » 16 juin 2011, 15:57

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

par Invité » 16 juin 2011, 15:55

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

par Invité » 16 juin 2011, 15:40

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

par Mazarini » 16 juin 2011, 15:37

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

par moogli » 16 juin 2011, 15:15

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

par Mazarini » 16 juin 2011, 15:14

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

par Invité » 16 juin 2011, 15:09

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

par Mazarini » 16 juin 2011, 15:01

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

par Invité » 16 juin 2011, 14:56

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

par Mazarini » 16 juin 2011, 14:40

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'] ?