IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

utilité des cookies pour l'espace membre


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Points : 23
    Points
    23
    Par défaut utilité des cookies pour l'espace membre
    Bonjour,

    je viens de faire un mini-espace membre sans aucun cookie...

    Pourquoi enregistrer le login et le mdp hashé dans un cookies? avec juste des variable de session ca fonctionne.. donc qu'est ce que j'y gagnerais et pourquoi tout le monde utilise les cookies?
    merci

    voici mon login.php
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
    // Create connection
    $conn = new mysqli($host, $user, $password, $basededonnee);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    $sql = "SELECT * FROM utilisateurs WHERE login = '".$login."' AND password = '".$user_pass."' ";
    $result = $conn->query($sql);
    $table_resultat = $result->fetch_array(MYSQLI_ASSOC);
    if ($result->num_rows == 0) { //MAUVAIS MDP ?>
     
    <!DOCTYPE html>
    <html>
    <head>
               <title>login</title> 
    </head>
    <body>
                <form method="POST" action="login.php" >
                    <input type="text" name="login"/>
                    <input type="password" name="password"/>
                    <input type="submit" value="Envoyer">
                </form>
                <em>Mauvais identifiants</em>
    </body>
    </html>
     
     
    <?php } elseif ($result->num_rows == 1) { // BON MDP
    session_start();
    $_SESSION["level"] = "known";
    $_SESSION["id"] = $table_resultat['id'];
    $_SESSION["login"] = $login;
    header('Location: cours.php');
    ////////////////////////////////////////////////////////////////////
    } else{
            echo " Problème de base de donnée";
    }
     
    $conn->close();
     
     
    } else { ?>
    <!DOCTYPE html>
    <html>
    <head>
               <title>login</title> 
    </head>
    <body>
                <form method="POST" action="login.php" >
                    <input type="text" name="login"/>
                    <input type="password" name="password"/>
                    <input type="submit" value="Envoyer">
                </form>
    </body>
    </html>
    <?php }

    et le fichier cours.php (le fichier protégé) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     <?php
    // Start the session
    session_start();
    if ($_SESSION["level"] == "known"){
        if(isset($_POST['deconnect'])){
    // remove all session variables
    session_unset();
    // destroy the session
    session_destroy();
    header('Location: login.php');
        }
    ?>
    <!DOCTYPE html>
    <html>
    <body>
        PAGE RESTREINTE !!!
        <form action="cours.php" method="post">
            <input type="hidden" name="deconnect"/>
            <input type="submit" value="Se deconnecter"/>
        </form>
    </body>
    </html>
    <?php }else {
        header('Location: login.php');
    }
     
    ?>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    j'ai une mauvaise nouvelle : vous utilisez bien des cookies

    les sessions de PHP utilisent en priorité un cookie comme support de l'identifiant de session :
    http://php.net/session.idpassing

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    ah oui en effet j'ai un cookie PHPSESSID...

    donc en fait j'ai simplement le choix de passer par phpsessid qui fait tout automatiquement, ou bien d'identifier les utilisateurs manuellement?
    Dès que je vais utiliser une variable de session ca va me faire une PHPSESSID? donc il faudrait que je remplace les variable de session par des variables en cookies??

    en fait la question c'est que la pluspart des sites ne spawn pas de cookies "PHPSESSID" et apparemment c'est mieux de ne pas l'avoir pour ne pas montrer qu'on utilise php mais dans ce cas là comment faire? C'est la fonction session_start qui le met obligatoirement?

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    "PHPSESSID" est le nom par défaut, vous pouvez le modifier avec la fonction http://php.net/session_name

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Je ne recommande pas de mettre un mot de passe hashé dans un cookie; mais autrement l'utilisation d'un cookie permet d'authentifier l'utilisateur pendant la période que tu veux (une journée, une semaine, dix ans...) alors qu'une session s'efface typiquement dès la fermeture du navigateur.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Oui, le vol d'un cookie de session ne peut être exploité que durant une session utilisateur et ce n'est pas toujours facile, alors que vol d'un mot de passe (quitte à prendre le temps de le "décoder" par la suite) est plus insidieux car sa pérennité peut être très longue (on ne change pas souvent de mot de passe) et il peut être utilisé sur plusieurs sites.

    Avec ssl pas de vol de cookie possible durant la transmission, mais il reste à penser à ceux qui partagent le même ordinateur à la maison ou au travail. La copie d'un cookie de session est inutile car si on peut le voler c'est que la session est encore ouverte et donc que le navigateur est encore ouvert, par contre on a le même problème que précédemment si quelqu'un s'amusait à copier un cookie contenant un mot de passe.

    Donc en fait l'ordre des niveaux de sécurité d'authentification est bien n°1 session, n°2 cookie et le cookie est pratique en complément pour identifier un utilisateur mais uniquement s'il est le seul à utiliser son ordinateur et en prenant soin que ce cookie ne contienne pas de mot de passe. C'est d'ailleurs pour cette raison qu'on a souvent une option à cocher ("se souvenir de moi") pour déclencher le cookie correspondant. Après bien sûr si tous les utilisateurs qui partagent le même ordinateur utilisent un compte différent tout est plus sécurisé mais quand on fait de l'authentification informatique il faut toujours se placer dans le contexte le plus défavorable et un compte utilisateur pour chaque utilisateur + une connexion ssl c'est le contexte le plus favorable et loin d'être la majorité des cas (enfin pour ssl ça commence à se démocratiser à grands pas).

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Ce qui amène la question suivante.

    J'ai installé le ssl et ai fait les redirection htaccess pour "interdir" le http. Est ce que maintenant je dois préciser dans les cookies qu'il doit être secure? Si j'ai bien compris ca désactive juste l'envois du cookie sur une connexion non chiffrée?
    et httponly je n'ai pas compris ce que ca signifie..

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Il faut utiliser le 6e argument (secure) de la fonction setcookie. Le résultat est que le navigateur n'enverra pas le cookie sur une connexion non https.

    Httponly veut dire que tu empêches la manipulation du cookie côté client, par javascript.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Je vous remercie. Vous me conseilleriez quoi entre ces deux façon de faire ?

    1- Je continue comme dans le code source plus haut, a chaque identification réussie de membre je démarre une session et j'enregistre l'identifiant dans une variable de session (le faire dans un cookie c'est mauvais non?))?

    2- Je démarre une session dès que le visiteur arrive sur la page, et s'il s'identifie j'enregistre son $_SESSION['status']= "connected"; et son identifiant?

    j'aime bien la deuxième solution car elle me permettrait de faire plus tard un analitycs pour traquer les visiteurs sur le site..

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Personne ne t'a dit de ne pas utiliser de cookie. Tsilefy t'a simplement dit plus haut de ne pas mettre le mot de passe (hashé ou pas) dans un cookie, et par la suite j'ai voulu t'expliquer pourquoi c'était dangereux pour la sécurité puisqu'on peut lire les cookies, durant la transmission en cas de piratage d'une connexion non ssl, mais aussi dans le navigateur du client s'il est accessible à plusieurs personnes. Toujours pas compris?

    Après pour le reste tu fais bien comme tu veux. Rien ne t'empêche de démarrer une variable de session pour chaque visiteur, puis d'en démarrer une autre ou de la modifier pour chaque authentification, c'est suivant tes besoins.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Si si j'ai bien compris. Je te remercie mais ce que j'avais voulu dire par

    1- Je continue comme dans le code source plus haut, a chaque identification réussie de membre je démarre une session et j'enregistre l'identifiant dans une variable de session (le faire dans un cookie c'est mauvais non?))?
    c'était que si j'enregistre le login dans le cookie qu'est ce qui empêchera le visiteur de bidouiller son cookie pour mettre le login d'un admin? Il n'était pas question de ne pas utiliser de cookies puisque maintenant je sais que par défaut PHPSESSID utilise les cookies.

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Evidemment il faut éviter de faire un système d'authentification basé sur des données facilement devinables... Dans le cookie tu pourrais mettre un identifiant aléatoire unique associé à chaque membre et généré avec openssl_random_pseudo_bytes par exemple.

    Enfin ça c'est pour gérer des connexions automatiques pour le commun des mortels, par contre pour un administrateur ayant beaucoup de pouvoirs il est plus prudent de ne pas utiliser ce système et de passer par la case authentification pour chaque nouvelle session, ce qui n'est pas un gros handicap puisque les navigateurs peuvent enregistrer les mots de passe. Et cela revient dans ce cas à ton premier système basé uniquement sur des sessions (le seul cookie utilisé et généré automatiquement ne contiendra que l'identifiant de session).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 197
    Dernier message: 27/04/2021, 00h11
  2. aide pour un espace membre
    Par cultureman dans le forum Langage
    Réponses: 4
    Dernier message: 03/09/2013, 15h54
  3. Réponses: 4
    Dernier message: 08/11/2008, 19h20
  4. [Forum] Quel forum pour mon espace membre
    Par okoweb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 28/08/2008, 00h12
  5. sécurisation des sessions pour une section membres
    Par CROSS dans le forum Langage
    Réponses: 5
    Dernier message: 20/06/2007, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo