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 :

[Sécurité] Problème reconnaissance session


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 23
    Points
    23
    Par défaut [Sécurité] Problème reconnaissance session
    Bonsoir,
    je suis en train de créer un site et depuis ce soir j'ai un petit problème. Lorsque je me connecte sur mon site, ensuite je voudrais qu'il reconnaise que je suis connecté donc j'ai mi :

    <?php
    session_start();
    if(!isset($_SESSION['login'])) {
    include ("login.html");
    }
    else {
    echo "Bonjour <strong>$login</strong>";}
    ?>

    Et il doit y avoir un problème...

    En espérant avoir été assez clair.
    Merci à tous !

  2. #2
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Quel erreur as-tu?

    Je te conseille d'utiliser header('Location: tapage.php') pour rediriger l'utilisateur plutot que include().

    Et utilise $_SESSION['login'] plutot que login dans ton echo.

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    le problème est que tu as oublié la balise code

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Et ben en fait,
    il faut être loggué pour poouvoir accéder à certaines pages,
    donc avant chaque page "protégée" j'ai mis le script suivi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?
    session_start();
    if(!isset($_SESSION['login'])) {
      echo 'une phrase';
      include('login.html');
      exit;
    }
    ?>
    Et pour se connecter j'ai celui-ci :
    Code : 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
     
    <?
    mysql_connect("****", "***", "***"); 
    mysql_select_db("***"); 
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
      extract($_POST);
      $sql = "select pwd from tbl_user where login='".$login."'";
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
      $data = mysql_fetch_assoc($req);
     
      if($data['pwd'] != $pass) {
        echo '<p>Mauvais nom d\'utilisateur / mot de passe. Merci de recommencer</p>';
        include('login.html'); 
        exit;
      }
      else {
        session_start();
        $_SESSION['login'] = $login;
        echo '<br><br><br>Vous êtes dès à présent connecté';
      }    
    }
    else {
      echo 'Vous avez oublié de remplir un champ.</p>';
       include('login.html');
       exit;
    }
    ?>
    J'espère que vous aurez compris

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    !!!!

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    tu sembles utiliser les globals_vars :
    C'est PAS BIEN DU TOUT (failles de sécurité !)
    tu utilises $_POST, $_SESSION, etc...
    utilise-les tout le temps

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    désolé pour les balise c'est rajouté

    ralalala , je n'ai jamais utilisé les globals_vars.
    Mais bon mon niveau me fait défaut lol.

    Mais en plus ce matin tout marchait correctement, j'ai faire quelque chose de pas bien

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    les globals_vars, c'est une configuration qui fait que le contenu de $_POST, $_GET, etc... pase automatiquement dans l'espace des variables courantes ($_POST['champ'] accessible directement via $champ, etc...)

    le problème est qu'il suffit alors de faire passer une variable en GET pour qu'elle soit injecter dans le code, c'est donc TRES risqué

    il vaut mieux utiliser les tableaux super globaux ($_POST, $_GET, $_SESSION, etc...) et faire attention à toujours initialiser ses variables...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par Swoög
    tu sembles utiliser les globals_vars :
    C'est PAS BIEN DU TOUT (failles de sécurité !)
    tu utilises $_POST, $_SESSION, etc...
    utilise-les tout le temps
    Oui, sans vouloir troler le post, qu'appeles-tu une globals_vars et surtout qu'elle est cette faille de sécurité ?

    **edit** Réponse de Swoög en même temps...

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par psychoBob
    Oui, sans vouloir troler le post, qu'appeles-tu une globals_vars et surtout qu'elle est cette faille de sécurité ?
    expliqué plus haut
    **Mort de Rire** on supprime nos cross-post ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par Swoög
    les globals_vars, c'est une configuration qui fait que le contenu de $_POST, $_GET, etc... pase automatiquement dans l'espace des variables courantes ($_POST['champ'] accessible directement via $champ, etc...)

    le problème est qu'il suffit alors de faire passer une variable en GET pour qu'elle soit injecter dans le code, c'est donc TRES risqué

    il vaut mieux utiliser les tableaux super globaux ($_POST, $_GET, $_SESSION, etc...) et faire attention à toujours initialiser ses variables...
    Ceci dit, si tu filtres toutes les variables avec htmlspecialchars et surtout mysql_real_escape_string, il me semble que cela supprime les risques inhérents à une variable injectée sournoisement. Ai-je tort ? Ai-je raison ? Hum... seul l'avenir nous le dira.

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par psychoBob
    Ceci dit, si tu filtres toutes les variables avec htmlspecialchars et surtout mysql_real_escape_string, il me semble que cela supprime les risques inhérents à une variable injectée sournoisement. Ai-je tort ? Ai-je raison ? Hum... seul l'avenir nous le dira.
    tort, tu parles ici d'injections SQL ou HTML...

    alors qu'avec les globals vars, il s'agit carrément de modifier la valeur d'une variable qu'on crois être de session, de cookie, d'environnement, etc....

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Merci de votre aide,
    le problème est résolu.

  14. #14
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    De rien
    Bonne continuation ^^

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par Swoög
    tort, tu parles ici d'injections SQL ou HTML...

    alors qu'avec les globals vars, il s'agit carrément de modifier la valeur d'une variable qu'on crois être de session, de cookie, d'environnement, etc....
    Oui mais bon, qu'est ce qu'il peut en faire le pirate, de sa variable avec une valeur modifiée ? Tant qu'il ne peut pas y glisser une requete sql ou un script php, puisqu'ils sont désactivés par les fonctions citées plus haut, ça va lui servir à quoi ?

  16. #16
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    à accèder à une partie protéger, modifier la valeur d'une variable pour provoquer une erreure pour avoir des infos sur le serveur...
    comme la liste des fichiers, les identifiants de connexion à la base etc...
    tout dépend du code PHP....

    tu serais surpris de voir tout ce qu'on peut faire avec une "simple" injection de variable, et je suis extrêmement loin d'être expert en la matière ^^

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    c'est chi...

    C'est l'histoire des register_global à on c'est ça ?

    Mais bon, par exemple : on fait une requete sql et avec les informations récupérées on initialise 2 variables de sessions. Bon, là elles ne sont plus modifiable les variables donc.

    Le truc c'est juste de toujours préciser $_SESSION['variable'], ou $_POST[variable], et jamais $variable tout seul, c'est ça ?

  18. #18
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    exactement, t'as compris

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    J'ai compris, j'ai compris... disons qu'a priori je tombe pas dans le piège...

    Ceci dit je ne vois pas la différence, en terme de sécurité, entre $_POST[variable] et $variable. QUe cela fasse une différence, d'accord, mais pourquoi...? Parce que cela dit que la variable provient forcément d'un formulaire ? Mais de toute façon, le pirate va bien l'insérer via un formulaire sa variable...

    G pas compris en fait... Mais au moins j'ai compris que j'ai pas compris. Avant j'avais même pas conscience de pas avoir compris.

  20. #20
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    lol

    c'est parce que là tu veux $_POST['variable'] qui est fournis par l'utilisateur...

    maintenant, supposons que la variable de session acces te permette de définir si quelqu'un est visiteur, administrateur, membre...

    si la session existe, et que la configuration est bonne, pas de problème, ce sont les variables de sessions qui prédomineront par dessus les get, post et cookies...


    MAIS si la session n'existe pas...

    il suffit de faire http://lapage?acces=admin

    à ce moment, $acces vaudra 'admin' et de ce fait, tu donnera un accès admin a quelqu'un qui n'est même pas identifié...

    Bien sûr, cela dépend du code qui est dessous...
    mais ça demande de toujours faire un unset sur les variables qui ne devraient pas exister, doubler les vérifications... ou... passer par les tableaux super-globaux [ce qui revient à ne pas utiliser les globals_vars] pour vérifier que les variables ont bien les valeurs qu'elles devraient avoir...
    la solution la plus sécurisée et la moins couteuse est d'utiliser tout le temps les tableaux super globaux

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 16h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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