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 sécurité


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut [Sécurité] Problème de sécurité
    Bonjour j'ai crée un espace membre (php avec base mysql).

    Quand la personne rempli son formulaire, elle accède à ces informations (page afficher.php).

    Cette personne peut modifier ces informations (page modifier.php).

    Le probleme, je peux passer une adresse par l'url pour tous les personnes inscrites:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://www.monsite/afficher.php?id=1
    En tapant cette adresse et en changeant l'id j'ai accès à toutes les pages .

    Pourtant j'ai mis ca en haut de ma page afficher.php

    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'])) {
      include('login.htm');
      exit;
    }
    ?>
    Mais cela ne marche pas

    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de galak63
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Par défaut
    ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include( "login.htm" );
    mais :

  3. #3
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par galak63
    ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include( "login.htm" );
    mais :
    Non plus, non...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Location: login.htm");

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Merci mais cela ne change rien, je peux toujours accèder a toutes les pages en changeant l'id de l'url.

    Je me permet de montrer mes pages.

    Page verif.php : verifier le formulaire et affiche une partie des infos de l'utilisateur

    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
     
    <?php 
    session_start();
     
    $base = mysql_connect '', '', '');
    mysql_select_db ('', $);  ?>
     
     
    <table width="500"><tr><td class="titre_infos">Espace Membre</td></tr>
    <tr><td><a  href="http://www.annuaire-les-vacances.com/membre/logout.php">Déconnexion </a></td></tr></table>
    <?php
     
     
    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 '<table align=center><tr><td width=500 class=descriptif_infos>Mauvais login / password. Merci de recommencer</td></tr></table>';
        header('login.htm'); 
        exit;
      }
      else {
     
        $_SESSION['login'] = $login;
     
        echo '';
     
      }   
    }
    else {
      echo '<table width=500 align=center><tr><td width=650 class=descriptif_infos>Vous avez oublié de remplir un champ.</td></tr></table>';
       header('login.htm'); 
       exit;
    }
     
     
    $sql = "SELECT * FROM gites, tbl_user WHERE gites.mailProprio=tbl_user.login AND tbl_user.login='".$_SESSION['login']."'";
     
        $requete = mysql_query( $sql, $cnx ) ;
       $id  = $_GET["id"] ;
     
        while( $result = mysql_fetch_object( $requete ) )
     
        {
           echo("<table width=500><tr><td width=450 class=descriptif_infos>
    	   <b>".$result->nomGite."</b><br>".$result->regionGite."<br>".$result->dptGite."<br></td><td>&nbsp;</td><td class=descriptif_infos> 
    	   <a href=\"#\" onClick=\"javascript:twNeowin('afficher.php?id=".$result->id."','monPopUp',600,400);\">modifier</a></td></tr><tr><td>&nbsp;</td></tr>\n") ;
     
        }
     
      ?>
    Page afficher.php, la personne peut modifier ses infos

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    <?
    session_start();
     
    if(!isset($_SESSION['login'])) {
     
     echo '<table><tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
       echo '<tr><td align=center width=650 class=texte_formulaire>Vous n\'êtes pas autorisé à acceder à cette zone</td></tr>';
         echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr></table>';
      header('login.htm');
      exit;
    }
     
     
        $cnx = mysql_connect ('', '', '');
     
        $db = mysql_select_db( '' ) ;
     
      $id  = $_GET["id"] ;
     
      /
    $sql = "SELECT * FROM gites   WHERE id = ".$id ;
     
     
      $requete = mysql_query( $sql, $cnx ) or die( mysql_error());
     
     
      if( $result = mysql_fetch_object( $requete ) )
      {
     
      ?>  
     
     
      <form name="insertion" action="modifier.php" method="POST">
      <input type="hidden" name="id" value="<?php echo($id) ;?>">
     <div class="membre">
     <table  border="0" align="center" cellspacing="2" cellpadding="2">
      <tr><td width="400" class="titre_infos">Modifier votre annonce</td></tr></table>
     
      <table  border="0" align="center" cellspacing="2" cellpadding="2">
          <tr align="center">
          <td class="descriptif_infos"><div align="left">Titre</div></td>
          <td ><textarea name="nomGite" cols="80"><?php echo($result->nomGite) ;?></textarea></td>
        </tr>
        <tr align="center">
          <td  class="descriptif_infos"><div align="left">Description</div></td>
          <td ><textarea name="descriptionGite" cols="80"><?php echo($result->descriptionGite) ;?></textarea></td>
        </tr>
        <tr align="center">
    	<tr>
    	  <td  class="descriptif_infos">R&eacute;gion</td>
     
          <td class="descriptif_infos">
         <?php
    echo "<select name=\"regionGite\">";
    $opt = ($result->regionGite == 'Alsace')?(' selected="selected"'):('');         
    echo "<option value=\"Alsace\"$opt>Alsace</option>";
     
    $opt = ($result->regionGite == 'Aquitaine')?(' selected="selected"'):('');
    echo "<option value=\"Aquitaine\"$opt>Aquitaine</option>";
     
     
    $opt = ($result->regionGite == 'Poitou-Charentes')?(' selected="selected"'):('');
    echo "<option value=\"Poitou-Charentes\"$opt>Poitou-Charentes </option>";
     
    $opt = ($result->regionGite == 'Rhône-Alpes')?(' selected="selected"'):('');
    echo "<option value=\"Rhône-Alpes\"$opt>Rhône-Alpes</option>";
     
     
    echo "</select>";
     
    ?>
     
     
     
          <td class="descriptif_infos" colspan="2"><input type="submit" value="modifier"></td>
        </tr>
    Et pour finit, pour valider les modifications, ca envoi vers la page modifier.php

    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
     
    <?
    session_start(); ?
     
    if(!isset($_SESSION['login'])) {
     
      echo '<table><tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
      echo '<tr><td width=650 class=texte_formulaire>&nbsp;</td></tr>';
       echo '<tr><td align=center width=650 class=texte_formulaire>Vous n\'êtes pas autorisé à acceder à cette zone</td></tr></table>';
      header('login.htm');
      exit;
    }
    ?>   
     
     
        $cnx = mysql_connect ('', '', '');
     
        $db = mysql_select_db( '' ) ;
     
     
      $nomGite     = $_POST["nomGite"] ;
      $descriptionGite = $_POST["descriptionGite"] ;
      $regionGite = $_POST["regionGite"] ;
      $dptGite        = $_POST["dptGite"] ;
      $typeGite        = $_POST["typeGite"] ;
      $multiTv        = $_POST["multiTv"] ;
      $capaciteGite        = $_POST["capaciteGite"] ;
        $nomProprio        = $_POST["nomProprio"] ;
       $id         = $_POST["id"] ;
     
     
      $sql = "UPDATE gites
              SET nomGite        = '$nomGite', 
    	      descriptionGite     = '$descriptionGite',
    		  regionGite    = '$regionGite',
    		  typeGite           = '$typeGite',
    		  multiTv			= '$multiTv',
    		  capaciteGite           = '$capaciteGite',
    		  nomProprio           = '$nomProprio',
     
              WHERE id = '$id' " ;
     
     
      $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
     
     
      if($requete)
      {
        echo("<br><br><br><table width=630><tr><td align=center class=descriptif_infos>La modification a été correctement effectuée</td></tr></table>") ;
     
      }
      else
      {
        echo("<br><br><br><table><tr><td class=descriptif_infos>La modification a echouée</td></tr></table>") ;
     
      }
    ?>
    Ca fais pas mal de teps que je consulte tous les forums, les tuto et je n'ai jamais su regler ce probleme.

    Merci d'avance pour votre aide

  5. #5
    Invité
    Invité(e)
    Par défaut
    preferes <?php à <? (obsolete)
    tu as un saut de ligne avt ton session start à supprimer mais tu aurais du avoir l'erreur de header deja envoyé;

    met ton error reporting à 0 pour voir ttes les erreurs : error_reporting(0);
    ça nous permettra de mieux t'aider

  6. #6
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par pod1978
    Merci mais cela ne change rien, je peux toujours accèder a toutes les pages en changeant l'id de l'url.
    Bonjour
    Je ne vois pas le rapport entre :
    1. Le paramètre id dans l'URL
    2. Le fait que tu rediriges vers une autre page si une certaine variable de session n'est pas positionnée.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Exusez moi mais je ne comprend pas tres bien ce que tu veux dire Eusebius.


    Je reformule ma question

    Lorsque je remlis le formulaire, je peux consulter mes infos mais le probleme c'est que si je ne ferme pasmon explorateur et que j'ouvre un nouvel onglet si je copie l'url suivante:
    http://monsite.fr/afficher.php?id=1235, j'ai accès aux infos d'autres membres.

    Et le fais de rajouter ce code en haut de mes pages , je croyais que ca aller me regler ce probleme de sécurité
    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'])) {
    header("Location: login.htm");
      exit;
    }
    ?>

    Mais ce n'est pas le cas

  8. #8
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    OK je vois, du moment que tu es connecté, tu peux accéder aux données d'un autre compte.

    Pour contrer ça, il faut qu'au lieu de vérifier si $_SESSION['login'] est simplement présente, vérifier sa valeur pour savoir si le visiteur a le droit d'accéder à la page (si tu as un id par compte, tu peux mettre cet id dans une variable de session à l'authentification, par exemple)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    J'ai en effet dans ma bdd mysql un champ qui s'appelle
    idmembre

    Il faudrais donc que je récupère ce champ lorsque la personne a validé son formulaire:

    $_SESSION['idmembre'] = $idmembre;


    Et ensuite en haut de mes pages je devrais mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?
    session_start();
     
     
    if(!isset($_SESSION['idmembre'])) {
     
     
    header("Location: login.htm");
      exit;
    }
    ?>
    J'ai testé cela mais ca ne fonctionne toujors pas

  10. #10
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Il faut que tu vérifies que $_SESSION['idmembre'] est bien égal à $_GET['id'], c'est ça ta condition de sécurité...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?
      session_start();
      if((!isset($_SESSION['idmembre'])) || ($_SESSION['idmembre'] != $_GET['id'])){ 
        header("Location: login.htm");
        exit;
      }
    ?>

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    J'ai a peu pres compris.

    Lorsqu le formulaire d'authentification est soumis, je récupère les champs login et pwd de ma table mysql tbl_user.

    Ensuite j'ai une deuxieme table mysql qui s'appelle gites dans laquelles il y bon nobre de champs dont
    id
    mailProprio...

    La relation se fait en fait entre le champ login de la table tbl_user et le champ mailProprio de la table gites et non entre le champ idmembre de la table tbl_user et le champ id de la table gites.

    J'ai donc essayé ce que vous m'avez dis:

    J'ai récupére le champ mailProprio comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $mailProprio=$_GET["mailProprio"];
    dans ma page verif.php

    Et ensuite dans les autres pages j'ai mis cela au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?
    session_start();
     
    if((!isset($_SESSION['login'])) || ($_SESSION['login'] != $_GET['mailProprio']))
    { header("Location: login.htm");
     exit; } ?>
    La bonne nouvelle est lorsque maintenant je tape une url du type:
    http://monsite.fr/afficher.php?id=1222, je n'y plus accès et je suis redirigé vers la page login.htm.

    Par contre lorsque je veux afficher et modifier mes infos, ca me met ausis cette page login.htm.

    Je viens de tester l'affichage et je crois que le problème est que je n'arrive pas à récupérer la valeur du champ mailProprio.

    C'est sur la page verif.php ou je dois récupérér ce champ mais pas moyen.

    Je vous montre la page car sur cette page j'ai su récupérer des champs de cette table mais d'une autre facon:

    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
     
    sql = "SELECT * FROM gites, tbl_user WHERE gites.mailProprio=tbl_user.login AND tbl_user.login='".$_SESSION['login']."'";
     
       echo $login;
        //exécution de la requête:
        $requete = mysql_query( $sql, $cnx ) ;
       $id  = $_GET["id"] ;
       $mailProprio=$_GET["mailProprio"];
       $login=$_GET["login"];
     
     
        //affichage des données:
        while( $result = mysql_fetch_object( $requete ) )
     
        {
           echo("<table width=500><tr><td width=450 class=descriptif_infos>
    	   <b>".$result->nomGite."</b><br>".$result->regionGite."<br>".$result->dptGite."<br></td><td>&nbsp;</td><td class=descriptif_infos> 
    	   <a href=\"#\" onClick=\"javascript:twNeowin('afficher.php?id=".$result->id."','monPopUp',600,400);\">modifier</a></td></tr><tr><td>&nbsp;</td></tr>\n") ;
     
        }
     
      ?>
    En effet les champs nomGite, regionGite font partie de la table mailProprio mais je ne sais pas quelle est le code pour récupérer un champ ca celui-ci ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $mailProprio=$_GET["mailProprio"];
    Merci encore pour votre aide

  12. #12
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Dans ton URL, tu as l'id, le mail du proprio et le login ??

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Non dans mon url je n'ai que l'id de la table gites

  14. #14
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par pod1978
    Non dans mon url je n'ai que l'id de la table gites
    Alors ça veut dire quoi le $_GET["mailProprio"] ???
    http://fr2.php.net/manual/fr/languag...predefined.php

Discussions similaires

  1. [Sécurité] problème de sécurité
    Par starr dans le forum Langage
    Réponses: 8
    Dernier message: 02/06/2007, 22h52
  2. [Sécurité] Problème de sécurité !
    Par sirbaldur dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2006, 12h05
  3. [Sécurité] Problème de sécurité avec l'upload
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 14/04/2006, 10h54
  4. [Sécurité] Problème de sécurité
    Par donid dans le forum Langage
    Réponses: 4
    Dernier message: 02/03/2006, 10h07
  5. [Debutant] Problème de sécurité dans un applet
    Par peaceinpal dans le forum Applets
    Réponses: 3
    Dernier message: 09/09/2004, 20h56

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