PHP : Session , sécurité , cookies

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par kinglouis, 31 Mai 2006.

Tags:
  1. kinglouis
    kinglouis WRInaute discret
    Inscrit:
    19 Mai 2004
    Messages:
    83
    J'aime reçus:
    0
    Bonjour,

    1 ) J'aimerais faire un système d'espace membres par sessions ( car les cookies ça pose des problèmes au niveau de la sécurité ) mais j'aimerais que le système garde un souvenir du visiteur pendant une durée " illimitée " , afin que le visiteur n'ait pas à se re-connecter à chaque fois qu'il ferme son navigateur.

    Est-ce possible ?

    2 ) Est-ce que le fait de mettre un

    Code:
    <?php echo $variable; ?>
    Tout en étant en register_globals = on peut constituer un trou de sécurité ?

    Merci beaucoup et bonne journée

    KL
     
  2. dmathieu
    dmathieu WRInaute accro
    Inscrit:
    9 Janvier 2004
    Messages:
    5 626
    J'aime reçus:
    0
    En quoi ? Je veut bien plus de détails ...

    Autrement, non, une session, de par son nom, ne dure que le temps de la session, et n'est pas illimité. Il faut un cookie pour être illimité.

    Après, $variable représente quoi ?
    Ta session ? Alors non, c'est pas bon, utilise $_SESSION['variable']
     
  3. kinglouis
    kinglouis WRInaute discret
    Inscrit:
    19 Mai 2004
    Messages:
    83
    J'aime reçus:
    0
    1 ) Ben immagine que tu stockes l'id du membre dans un cookie et que le visiteur modifie son cookie > il peut faire ce qu'il veut , et se faire passer pour n'importe quel autre membre .

    Avec les sessions , il ne peut pas modifier cet id !

    2 ) Pour la variable , ça représente un message que je souhaite afficher .

    Genre " index.php?message=votre inscription est réussie " affiche " votre inscription est réussie " sur la page index .

    Ca peut constituer une faille ?
     
  4. e-kiwi
    e-kiwi WRInaute accro
    Inscrit:
    23 Décembre 2003
    Messages:
    13 257
    J'aime reçus:
    1
    moi j'utilise le cookie seulement pour faire partir la session, pour qu'en tant que visiteur, il n'y ai pas de session (pour le referencement) et des identification, je crée un cookie, et si le cookie existe -> session_start()

    ensuite, que tu soit en register_global on ou off, il faut coder proprement, c'est à dire $_GET['varible'] pour les variables passées par l'URL, $_POST['variable'] pour les variables de formulaire, et $_SESSION['variable'] pour les variables de session. utiliser $variable directement ouvre les portes aux failles de sécurité :)
     
  5. dmathieu
    dmathieu WRInaute accro
    Inscrit:
    9 Janvier 2004
    Messages:
    5 626
    J'aime reçus:
    0
    Que tu crois !
    La session fonctionne de la manière suivante :
    - Lors de l'initialisation, un sessid est attribué à l'utilisateur. celui-ci est placé dans un cookie de session
    Et les données de la session sont placées sur le serveur.
    Lorsque tu récupère une donnée de session, il prends celle qui a le bon identifiant de session.

    Tu modifie le cookie de session, tu modifie l'identifiant à ton gré.

    MAIS il faut encore connaitre l'identifiant de session de l'autre visiteur ...

    Pourquoi ne pas partir sur une idée similaire pour tes cookies ? Un identifiant de session cookie généré aléatoirement, mais unique, et qui te permet de récuperer les informations de l'utilisateur.

    Pour $variable, mets : htmlentities($_GET['variable']);
    Et ca ne posera pas de problèmes.
     
  6. e-kiwi
    e-kiwi WRInaute accro
    Inscrit:
    23 Décembre 2003
    Messages:
    13 257
    J'aime reçus:
    1
    ps : il ne faut pas confondre les "cookie serveurs" et les "cookies client".
     
  7. f_trt
    f_trt WRInaute impliqué
    Inscrit:
    17 Septembre 2005
    Messages:
    970
    J'aime reçus:
    0
    C'est simple tu mets deux cookies, un avec un identifiant généré aléatoirement de 23 caractères par exemple faudra déjà avoir de la chance pour tomber sur une clefs de 23 caractères existante et ensuite dans le deuxième cookie le mot de passe.

    Je vois pas comment a moins d'avoir une mega chance quelqu'un peut alors trouver la paire. Et enfin si il y a plus de trois echec tu bloques l'accès c'est à dire que tu ne test plus si le mot de passe correspond jusqu'a déblocage du compte.

    Encore une fois un cookie jusqu'a preuve du contraire n'est pas une faille de sécurité c'est uniquement une info qui est stocké sur l'ordi de l'internaute les failles sont l'utilisation qu'on en fait si par exemple l'internaute partage sont disque complet evidement c'est pas good, si l'internaute n'est pas chez lui c a d dans un NET CAFE ou autre alors il faut le prévenir de ne pas enregistrer ses cookies.

    A+
     
  8. kinglouis
    kinglouis WRInaute discret
    Inscrit:
    19 Mai 2004
    Messages:
    83
    J'aime reçus:
    0
    Tout d'abord , merci pour vos réponses , je vais encore vous demander quelques précisions :

    1 ) Les cookies et les sessions

    >> En quoi ce cookie diffère-t-il du cookie souvent nomné PHPSESSID qui est créé automatiquement par l'utilisation des sessions ?

    Quelle serait la différence avec le cookie créé par les sessions ?



    Et moi après , comment je retrouve l'identifiant et le mot de passe ?
    Moi en fait il faut qu'un " id " soit transmis de page en page mais si je le génère aléatoirement comme tu dis , comment je retrouve le bon vrai " id " ?

    2 ) echo $variable;

    Ok merci je ferai ça

    3 ) Register_globals

    Est-ce que , si on est à register_globals on ( donc le truc pas top niveau sécurité ) , qu'on écrit echo $POST['variable']; et qu'on fait page.php?variable=lalalalalala , ça va afficher lalalalala ? ( en clair est-ce qu'en register globals on , même si on met $POST , les variables passent par URL ? )

    Merci !
     
  9. dmathieu
    dmathieu WRInaute accro
    Inscrit:
    9 Janvier 2004
    Messages:
    5 626
    J'aime reçus:
    0
    le 1 : Ce qui change, c'est que ton cookie reste sur la durée. Un cookie de session est supprimé en fin de session.

    Pur récuperer ton identifiant généré aléatoirement, il suffit de le stocker sur ton serveur.
    Dans ta base de données, tu ajoute un champ sessid pour ton utilisateur, et tu place cet identifiant dedans.
     
  10. gomoz
    gomoz WRInaute discret
    Inscrit:
    29 Décembre 2004
    Messages:
    225
    J'aime reçus:
    0
    (soit donc un code du genre :

    Code:
    A LA CONNEXION
    //création de la clef :
    $session=md5(microtime());
    //inscription des variables d'indentification :
    setcookie('id',$id,time()+60*60*24*30,'/',false);
    setcookie('clef',$session,time()+60*60*24*30,'/',false);
    //tu stock dans ta BDD $session
    ...
    
    
    SUR TOUTES TES PAGES 
    //si pas connecté et si un cookie est déclaré :
    ...
    //tu check la base pour regarder si la variable de session est la bonne :
    $sql='... WHERE id='.$_COOKIE['id'].' AND session='.$_COOKIE['session'];
    //s'il te sort un resultat, tu connect le gars, sinon tu ne fais rien 
    Ca n'a rien à voir. Regarde plutot la doc pour comprendre comment ca marche. C'est utile pour la sécurité mais il ne faut surtout pas placer ca partout.
     
  11. kinglouis
    kinglouis WRInaute discret
    Inscrit:
    19 Mai 2004
    Messages:
    83
    J'aime reçus:
    0
    Ok merci pour le code , je vois mieux comment faire .

    Peux-tu être plus précis à propos du htmlentities($_GET['variable']); , c'est pas bon de mettre ça partout ?
     
  12. gomoz
    gomoz WRInaute discret
    Inscrit:
    29 Décembre 2004
    Messages:
    225
    J'aime reçus:
    0
    la doc dit que cette fonction transforme :
    * "&" (et commercial) devient "&amp;"
    * """ (guillemets doubles) devient "&quot;" lorsque ENT_NOQUOTES n'est pas utilisée.
    * "'" (single quote) devient "'" uniquement lorsque ENT_QUOTES est utilisée.
    * "<" (inférieur à) devient "&lt;"
    * ">" (supérieur à) devient "&gt;"

    Ca a un rapport avec la sécurité car évite que quelqu'un entre "<?php echo'machin'; ?>" et que ce texte doit être écris sur un fichier de ton serveur par exemple mais si tu le fais systématiquement :
    1/ tu ralentis ton code avec une fonction inutile
    2/ tu aura un prb si tu comparer ce type de valeurs if(htmlentities('vi<tore')=='vi<tore');

    => à utiliser donc mais seulement quant il y a besoin... (logique non ?)
     
Chargement...
Similar Threads - PHP Session sécurité Forum Date
PHP session perso : session_start() en erreur. Développement d'un site Web ou d'une appli mobile 27 Juillet 2020
Memcached/PHP gestion de sessions Développement d'un site Web ou d'une appli mobile 22 Juillet 2020
Arfooo PHP 7 : (2) session_start(): Cannot send session cache limiter Annuaires et moteurs 31 Janvier 2019
Cannot send session cache limiter - headers already sent en php5 Développement d'un site Web ou d'une appli mobile 14 Mars 2013
Lecture données d'une SESSION PHP différente de celle en cours Développement d'un site Web ou d'une appli mobile 14 Février 2013
Session php et crawlers Développement d'un site Web ou d'une appli mobile 12 Mars 2012
ID de session PHP et crawl de google URL Rewriting et .htaccess 10 Janvier 2012
Remplacer session_register (php5.3) Développement d'un site Web ou d'une appli mobile 17 Octobre 2011
Problème session php Développement d'un site Web ou d'une appli mobile 24 Septembre 2011
Sessions PHP et Google Référencement Google 3 Mai 2011