PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 06-06-2012 09:33:03

debe
Membre
Inscription : 25-06-2009
Messages : 87

usurpation de session

bonjour,

j'ai un soucis de connexion de session : certaines personnes m'ont contacté, impression d'écran à la clée, pour me dire qu'ils se retrouvaient connecté à la place d'un autre. Je ne comprends pas comment cela peut se produire.

j'ai deux système de connexion.
1) soit on se connecte à chaque fois

$mel = $_POST['mel'];
$mdp= $_POST['mdp'];
// apres test mel et mdp valide
$sqlinsc = "SELECT id FROM matable WHERE mel = '$mel' AND mdp !=''";
$reqinsc = mysql_query($sqlinsc)  or die('Erreur SQL !'.$sqlinsc.'<br>'.mysql_error().'<p><b>Afin de nous aider au maintient de ce site, merci d\'envoyer une copie de ce message à webmaster@cyberacteurs.org</b>');
$res = mysql_num_rows ($reqinsc);
if($res !='0')
{
 $_SESSION['id'] = $data['id_signataire'];
$_SESSION['nom'] = stripslashes($data['nom']);
$_SESSION['prenom'] = stripslashes($data['prenom']);
}

2) soit on est reconnus grâce à un cookie

if(empty($_SESSION['id_signataire']) && !empty($_COOKIE['mellog']) && !empty($_COOKIE['mdplog']) )
{
  $mellog= $_COOKIE['mellog'];
  $mdplog= $_COOKIE['mdplog']; 
 
  $sql = "SELECT * FROM matable WHERE mel = '$mellog' && mdp = '$mdplog' && codevalid = 'ok'";
  $req = mysql_query($sql);
  $data = mysql_fetch_assoc ($req);
  $result = mysql_num_rows ($req);
if($result !=0)
      {
 $_SESSION['id'] = $data['id_signataire'];
$_SESSION['nom'] = stripslashes($data['nom']);
$_SESSION['prenom'] = stripslashes($data['prenom']);               

}

puis sur chacune des pages, j'ai

ini_set('session.use_cookies', '1');
ini_set('session.use_only_cookies', '1');
ini_set('session.use_trans_sid', '0');
ini_set('session.name', 'PHPSESSID');
ini_set('session.auto_start', '0');
ini_set('session.cookie_lifetime', '0');
ini_set('session.cookie_httponly', '0');  
ini_set("url_rewriter.tags","");
setcookie('testcookie','ok',time()+3600*24*1,'/');
session_start();

cela est très embêtant car certaines personnes me contact car quelqu'un a signé les pétitions avec leur nom

Hors ligne

#2 06-06-2012 11:51:29

jerome76
Membre
Inscription : 22-05-2012
Messages : 7

Re : usurpation de session

Ou est ce que tu teste le mot de passe ?


$sqlinsc = "SELECT id FROM matable WHERE mel = '$mel' AND mdp !=''";
 

Tu vérifie juste que le mot de passe ne soit pas une chaine vide.

$sqlinsc = "SELECT id FROM matable WHERE mel = '$mel' AND mdp ='$mdp'";
 

Ne pas oublier addslashes si les magicquotes ne sont pas activées.

Hors ligne

#3 06-06-2012 13:06:36

debe
Membre
Inscription : 25-06-2009
Messages : 87

Re : usurpation de session

pour l'instant, j'ai cela

$mdp = mysql_real_escape_string($mdp);
$mdp = ereg_replace(' ', '', $mdp);
 if ($mdp=="")
   {
   echo '<font color="#FF0000">ATTENTION, votre mot de passe n\'a pas été renseigné</font><p></font><b>Veuillez renouveler l\'opération à l\'aide du formulaire ci-dessous</b><p>';
  require '../include/form_login.inc';
 exit();
   }

sur la page de login

sur la page de connexion automatique, c'est cela qui fait

if(empty($_SESSION['id_signataire']) && !empty($_COOKIE['mellog']) && !empty($_COOKIE['mdplog']) )

Hors ligne

#4 06-06-2012 22:54:03

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : usurpation de session

Bonjour,

C'est le genre de problème que l'on rencontre quand on part du principe que tout se passe comme on l'a prévu et quand on laisse la place à l'imprevisible en étant laxiste sur les processus. J'ai écris d'ailleurs sur ce forum un post épinglé intitulé "Conseils d'un développeur" qui sert justement à éviter ce genre de problèmes.

Voici ce que je vous recommande pour stabiliser votre code vu aussi que tout le code gérant les accès sur votre site n'est pas exposé ici

1) Lorsque l'on recherche un id de compte sur un couple de colonnes ne constituant pas la clé primaire (pseudo, mdp) , (email, mdp), ...  , poser un index unique sur l'un des deux de manière à éviter tout risque d'effet de bord lors d'une connexion d'un individu sur un compte ayant un identifiant commun avec un autre compte. Je vous conseille très fortement d'utiliser comme colonne a index unique celle du pseudo, car les membres d'une même famille peuvent très bien utiliser le même email sur leur compte respectif s'il en expriment le souhait, pour ne citer que celui-là, car il y en a de nombreux autres non négligeables comme par exemple la simple considération que l'email d'une personne relève par définition du domaine public.

Je rappele à tous ceux qui lisent ce post, que le responsable du site est responsable pénalement des informations confidentielles personnelles confiées par les internautes sur leur compte. Imaginez les dégats possibles : usurpation d'identité, utilisation frauduleuse de la carte bancaire d'un tiers, etc... tous ces cas peuvent vous conduire tout droit en prison. Il est donc temps de ne pas prendre à la légère la façon dont on conçoit et rédige son code, et de faire de l'a peu près sous le seul pretexte de "quel importance?", "quelle différence?" ou "ca ira bien, c'est déjà pas mal". Pensez également et pour les mêmes raisons à sécuriser les communications réseaux pour le mode connecté de vos clients via un certificat SSL et le mode https.

2) lisez bien le contenu du post "conseils d'un développeur" et appliquez le à votre code.

cordialement,

Jc.

Dernière modification par Jc (06-06-2012 23:02:42)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 07-06-2012 09:32:27

debe
Membre
Inscription : 25-06-2009
Messages : 87

Re : usurpation de session

merci beaucoup jc pour ce message très instructif. [petite précision, ce n'est pas par flemme que je code mal, mais par incompétence (bénévole autodidacte) ... ce qui n'excuse rien, j'en conviens smile  ]

en ce qui concerne ta réponse à mon pb :

Je vous conseille très fortement d'utiliser comme colonne a index unique celle du pseudo

mon pb (mon erreur !) a été dans ce cas de ne pas prévoir de pseudo mais d'utiliser l'email + mot de passe pour la reconnaissance.

mdp a déjà un index mais pas unique (et il m'est refusé de le faire) en effet, plusieurs personnes peuvent avoir le même mot de passe
email : déjà indexé aussi mais même problème

est-ce que je dois :
1) pour la connexion automatique (cookie) ne plus me servir du couple email + mdp mais du trio email+mdp+id pour plus de sureté ?
2) pour la connexion manuelle (champ mail et champ mot de passe). Comment m'en sortir ? (je sais , mauvaise conception mais je ne pensais pas que des données proches pouvaient se mélanger.)
      * en demandant un troisième champ (nom par exemple) lors de la connexion ? mais les inscrits vont râler, déjà qu'ils trouvent compliqué avec 2 smile
     * une page de confirmation avant validation connexion 'vous êtes bien $nom $prenom ? et bouton confirmer ou changer d'utilisateur ?

encore du boulot avant de quitter le statut de débutant ! merci JC pour ton éclairage

Hors ligne

#6 07-06-2012 10:38:12

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : usurpation de session

Bonjour,

Pour répondre à tes questions, tu ne peux te servir de l'id, car c'est justement ce que tu cherches à récupérer à partir du couple email+mdp (dans ton cas) pour pouvoir gérer la connexion de l'utilisateur concerné. Essaye dans un premier temps de poser un index unique à la fois sur l'email et le mdp pour limiter la casse. Si le moteur mySQL refuse car des doublons existent sur plusieurs couples email+mdp alors tu es dans une impasse et il te faudra refaire ton modèle de connexion, tu n'auras pas le choix. Il faudra mettre en place alors une procédure spéciale pour certains utilisateur afin qu'ils puissent retrouver l'usage de leur compte.

En ce qui concerne la connexion automatique.
Elle ne doit et en aucun cas pouvoir se substituer à la connexion manuelle. Comment doivent être utilisés les cookies alors? Tu fais comme tu veux dans l'absolu (chacun prends ses responsabilités) mais voici les usages possibles auxquels il faut se limiter à mon sens :
- Limiter les contraintes de timeout de connection avec un mode de connexion "rester connecté" (bien que ceci peut être fait sans cookies).
- Enregistrement des paramétrages "préférences utilisateurs" dans l'ergonomie du site si celui-ci est paramétrable, ainsi que certaines actions faites par l'utilisateur sur le site lors de précédentes connexions (peut être fait sans cookies également).
- Contrôle annexe de la machine qui se connecte.

Pour la connexion manuelle, j'ai déjà répondu : Suivre les recommendations de développement faites dans ce post sur ce forum.

Si vous avez d'autres questions n'hésitez pas wink

Cordialement,

Jc.

EDIT: Même si l'index unique sur l'email et le mdp passe peut limiter la casse et résoudre temporairement ton problème, cela reste complètement insatisfaisant et insuffisant dans l'absolu, que l'on soit bien d'accord. Refaire le modèle reste la meilleure décision possible et la seule solution envisageable sur ce point. Cela doit rester donc en attendant du "très provisoire".

Dernière modification par Jc (10-06-2012 21:19:10)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 11-06-2012 08:51:42

debe
Membre
Inscription : 25-06-2009
Messages : 87

Re : usurpation de session

merci JC pour ton aide claire et précise ... je vais refaire mon système prochainement.

mon soucis va être de garder mes inscrits, de faire la transition. mais ça, c'est mon pb.

Hors ligne

Pied de page des forums