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 de session


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut [Sécurité] Problème de session
    Je viens de lire un post plus bas au sujet des sessions et j'ai vu qu'il fallait mettre ce code pour verifier qu'une variable appartient bien à une session

    <?php
    if(isset($_SESSION["prenom"])) {
    echo "La variable prenom est déjà enregistrée !";
    } else {
    echo "La variable prenom n'est pas enregistrée !";
    // On est cerntain d'y avoir accès ici
    }
    ?>


    Mon problème est que j'ai mis une page de connexion avec un login et mot de passe et elle "protege" l'accès au site. Mais si je rentre directement la page dans la barre d'adresse je peux y accéder sans rentrer de login ni de mot de passe.

    Quel est la solution pour eviter ca ? Je dois rentrer le code ci dessus dans chaque page ?

    Merci d'avance pour votre aide ! ( Je ne connais pas grand chose sur les sessions, je viens juste de m'y mettre)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut


    oui le code que tu as mis doit être mis sur chaque page où tu as besoin de contrôler l'accès
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Invité
    Invité(e)
    Par défaut
    si tu peux y rentrer sans te connecter c'est un pb de securité grave
    tu dois dans chacune de tes pages a securisé mettre un session_start en tout debut et verifié que ta valeur de session est bien renseigné
    par exemple si tu te connecte avec login et mdp et que tt est ok tu peux enregistré la la varible de session login comme suit $_SESSION['login'] = $login.

    puis dans chacune de tes pages tu fais
    if(!isset($_SESSION['login']) || $_SESSION['login']=="")
    {
    //traitement derreur,
    soit un header qui redirige
    soit un message derreur suivi d'un exit etc
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Merci beaucoup, c'est bien ce qu'il me semblait !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    J'ai rentré ce code dans ma page haut.php ( elle est apellée dans chaque page du site par un require ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?
    session_start();
     
    if(!isset($_SESSION['login']))
    {
    	require("indexfaux.php");
    }
    ?>
    Donc maintenant il me met bien une erreur si je ne suis pas loggué et que j'essaye de passer directement par la barre d'adresse, mais il m'affiche tout de meme la page que je tape dans la barre en dessous de ma page indexfaux.php

    Cela peut venir d'ou ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    c'est nomal car il execute ton if puis continue lexecution de la page
    soit tu fais un header vers la page derreur (header location)
    soit tu met un exit qui stop tout

    ma prefrence va au header

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Comment ca un header ? Je pensais que le require vers ma page indexfaux.php suffirais a ne pas ouvrir la page demandée sans login et mot de passe.

    Ma page indexfaux correspond a la page d'identification avec un msg derreur de connexion.

    Qu'est ce que je dois rajouter dans le code pour que ca ne m'envoie que la page d'erreur et que ca bloque l'acces au site ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    le require va juste afficher ta page je crois come un include puis executera le reste de ta page normalement alors que le header redirige ta page mais il faut qu'aucune entete ne soit envoyé avant

    <?
    session_start();
    if(!isset($_SESSION['login']))
    {
    header("Location: /indexfaux.html")
    }
    ?>

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    J'ai bien rajouter le code, mais le probleme maintenant c'est que ca m'envoie sur la page qui correspond au header meme qd je valide ma connexion. dc je n'ai plus acces au site à la premiere connexion, comme s'il m'envoyait au header avant que je me connecte à une session ...

  10. #10
    Invité
    Invité(e)
    Par défaut
    tu peux montrer le code des 2 pages : la page de connection et celle tu as inseré le code quon ta donné

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Code de ma page de connexion :

    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
     
    <form action="connexion_bdd3.php" method='POST' style="width: 100%; margin-top: 24px; margin-bottom: 48px;">
    <fieldset style="padding-top: 8px; padding-bottom: 8px; width: 40%; margin-left: auto; margin-right: auto;">
    <legend class="fontcolor3" style="font-variant: small-caps;">Identification</legend>
    <table style="width: 100%; border: 0;" cellpadding="5" cellspacing="0">
    <tr>
    <td style="text-align: right; width: 40%; font-variant: small-caps;">Identifiant</td>
    <td style="text-align: center; width: 60%;"><input type="text" name="log"></td>
    </tr>
    <tr>
    <td style="text-align: right; width: 40%; font-variant: small-caps;">Mot de passe</td>
    <td style="text-align: center; width: 60%;"><input type="password" name="pass"></td>
    </tr>
    </table>
    <input type="submit" name="submit" value="Valider" style="font-variant: small-caps;">
    </fieldset>
    </form>

    Code de ma page haut comprise dans toutes les pages du site :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     <?
     
    session_start();
     
    if(!isset($_SESSION['login']))
    {
    header("Location:indexfaux.htm");
    }
     
    ?>

    L'image en annexe correspond au bout du code de ma page de connexion

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Est ce que tu as besoin de mes autres pages de connexion ? Celles qui vont chercher dans la BDD ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    si je comprends bien ta logique

    index.php permet de se connecter (image)
    ton formulaire de conn va sur connexion_bdd3.php qui fais les vérification
    2cas :
    si c'est ok tu vas sur ta page membres (avec le pti bout de code en debut)
    sinon tu retourne a laccueil avec un message derreur

    au lieu de faire un header sur indexfaux, tu na qua faire un header vers ta page de connection et si en bonus tu veux le message derreur tu le met en get que tu recupere

    exemple erreur de login :

    page connexion_bdd3.php>
    header(location : index.php?erreur=login)

    page index.php >
    tu recupere avec $_GET['erreur'] (sans oublier de verifier lexistence etc)
    if(isset($_GET['erreur']) && $_GET['erreur']=='login") echo "mauvais login";

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Voir message suivant

  15. #15
    Invité
    Invité(e)
    Par défaut
    au lieu des index.php tu met ta page connexion.php

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Ma page connexion.php m'envoie vers ma page connexion_bdd3.php qui elle verifie que la connexion avec la BDD se fait bien et que le login et mdp sont les bons. S'il sont bons alors la page ouvre la session et envoie vers une page d'administration; s'ils sont faux alors ca m'envoie vers indexfaux.php a travers un require.
    Ca c'est tout ce qui gere ma connexion à partir de ma page connexion.


    Ensuite j'ai rajouter le code dont on parle avec le isset dans chaque page (excepté la page de connexion ...) grace a ma page haut.php


    Le probleme c'est que maintenant il me redirige vers la page d'erreur meme si je rentre le bon login et mdp ... :s

  17. #17
    Invité
    Invité(e)
    Par défaut
    monte le code de ta page connexion_bdd3.php

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    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
    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
    58
    59
    60
     
    <?
    	require("connexion_bdd2.php");
    ?>
    <?
     
     
      $loginOK = false;
     
    //récupération du login en supprimant les espaces parasites (en début et en fin de chaine)
    $login=trim($_POST['log']);
     
    //récupération du mot de passe en supprimant les espaces parasites
    $passwd=trim($_POST['pass']);
     
    // Vérification champ de saisie non vides !
      if (!empty($login)) 
        {
          if (!empty($passwd))  
    	    {
     
    //Création d'une requete SQL de sélection de l'utilisateur
    $req = "SELECT *
    		FROM utilisateur 
    		WHERE login='$login'";
    $cherche=mysql_query($req) or die('erreur d\'identification');
     
    //et récupération du résultat dans un tableau
     
    $trouve = mysql_fetch_assoc($cherche);
     
     
    //vérification du mot de passe
    		if($trouve['mdp']==$passwd)
    			{
    				$loginOK = true;
    			};
    		};
    	};
     
     // Si le login est correct on ouvre la session
     
      if ($loginOK==true) 
        {
     
    	$_SESSION['login'] = $trouve['login'];
    	$_SESSION['statut'] = $trouve['statut'];
    	$_SESSION['nom'] = $trouve['nom'];
    	$_SESSION['prenom'] = $trouve['prenom'];
    	require("administration.php");
    	}
     
      else
    	{
    		require("connexionfaux.php");
    	};
     
     
     
    ?>

    Le require connexion_bdd2 sont les infos de connexion au serveur ( host...)

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Je crois avoir trouvé, je n'ai pas ouvert le session_start dans connexion_bdd3.php

    C'est bien ca ?

    A ben non meme pas, avec ce session_start dans connexion_bdd3 je px a nouveau acceder a toutes mes pages en tapant la page dans la barre d'adresse sans avoir a me conecter

    Et en plus maintenant que je l'ai rajouté j'ai le msg d'erreur suivant qui apparait
    Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-7\www\grh191\haut.php

    (la page s'affiche qd meme, mais j'ai ce msg d'erreur tout en haut )

  20. #20
    Invité
    Invité(e)
    Par défaut
    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
    30
    31
    32
     
    <?php
    require("connexion_bdd2.php");
    //récupération du login et mdp en supprimant les espaces parasites (en début et en fin de chaine)
    $login=trim($_POST['log']);
    $passwd=trim($_POST['pass']);
     
    // Vérification champ de saisie non vides !
    if (!empty($login) && !empty($passwd))  
    {
    //Création d'une requete SQL de sélection de l'utilisateur
    $req = "SELECT *
    FROM utilisateur
    WHERE login='".addslashes($login)."' and mdp='".addslashes($passwd)."'";
    $cherche=mysql_query($req) or die('erreur d\'identification');
     
    if(mysql_num_rows($cherche) == 1)
    {
        //et récupération du résultat dans un tableau
        $trouve = mysql_fetch_assoc($cherche);    
        $_SESSION['login'] = $trouve['login'];
        $_SESSION['statut'] = $trouve['statut'];
        $_SESSION['nom'] = $trouve['nom'];
        $_SESSION['prenom'] = $trouve['prenom'];
        header("location :administration.php");
    }
    else
    {
    //aucun enregistrement pour ce login/mdp
    header("location :connexionfaux.php");
    }
    ?>
    jai un peu modifié ton code, ça devrait etre ok comme ça
    tu nes pas obligé de faire des verifation empty mais bon, tu peut aussi directement tarité tes $_POST sans passé par des varibles intermediaire

    et favorise le <?php plutot que le <?

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

Discussions similaires

  1. [Sécurité] problème déconnexion d'une session
    Par gazelle dans le forum Langage
    Réponses: 4
    Dernier message: 18/04/2007, 19h31
  2. Réponses: 2
    Dernier message: 08/01/2007, 20h46
  3. [Sécurité] Problème de sessions avec IE6
    Par TheMoutch dans le forum Langage
    Réponses: 8
    Dernier message: 21/08/2006, 17h52
  4. [Sécurité] Problème avec des variables de session
    Par zoom61 dans le forum Langage
    Réponses: 28
    Dernier message: 18/08/2006, 21h05
  5. [Sécurité] Problème de valeur de session
    Par navis84 dans le forum Langage
    Réponses: 19
    Dernier message: 22/06/2006, 10h48

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