Page 1 sur 2

Securisation page membre

Posté : 08 avr. 2011, 21:58
par prohand
Bonsoir,

J'ai un petit problème de securité :(

En faite j'ai une page login.php :

<?php
session_start();
    if(isset($_POST['tbx_login'])==true) // On verifie que le champ a bien été posté, si oui on continue
    {
		$Login=$_POST['tbx_login']; // Recuperation du login entré dans le champ ( On le met dans une variable )
		$pass=$_POST['tbx_pass'];  // Pareil que le login
	
		if(VerifLogin($Login,$pass)==true) // On regarde dans la fonction si elle nous retourne true
		{
			$_SESSION['LoginOK']=1; // Si la fonction retourne true alors on autorise le login et on redirige sur la page membre
            header("Location:membres.php?Login=".$Login.""); 		
		}
		else
		{
			$_SESSION['LoginOK']=0; // Sinon on refuse le login.
			
		}
		
		

    }
?>
<form action="login.php" method="post">
<center><img src="images/login.png"></center>
<center><TABLE BORDER="1"><tr><th><center>Login : </center><input type="text" name="tbx_login" value="<?php if(isset($_POST["Login"])){echo $_POST['Login'];}?>" /></th></tr><br />
    <tr><th><center>Mot De Passe : </center><input type="password" name="tbx_pass" value="" /></th></tr><br />
    <tr><th><input type="submit" value="envoyer"></tr></th>
</form><center></TABLE> </center>
<?php
function VerifLogin($Login,$pass)
{
        include('config.php');
		$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
		$sql=$connexion->query("SELECT login,pwd FROM membres"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
		$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		while( $data = $sql->fetch() ) 
	
        {
           if($data->login==$Login) // On recupere le login et on le met dans la variable Login
           {
             if($data->pwd==$pass) // On recupere pwd et on le met dans la variable pass
              {
               $sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		       return true;
		      }
			  else
			  {
			   echo("Le mot de passe n'est pas correct");
			  }
		   }
		    else
		   {
		    echo("Le nom d'utilisateur n'est pas correct");
		   }
				
		}
	
		$sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		return false;
}

?>
Et une page membres.php :
<?php
include('config.php');
?>
<head>
<title>Page Membres</title>
</head> 
<?php
 //récupération de l'identifiant de la personne:
$Login  = $_GET["Login"] ;
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
$sql=$connexion->query("SELECT * FROM membres WHERE Login = '$Login' ");// on va chercher tous les membres
$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet

if( $result = $sql->fetch() ) // on récupère la liste des membres

       echo(
           "<div align=\"center\">"
           
           ." <a href=\"modifmembres.php?id=".$result->id."\">modifier</a></div>\n"
       ) ;
   
?>
    
   
   <table border="0" align="center" cellspacing="2" cellpadding="2">
   <tr align="center">
 <td>Login : </td>
<td><?php echo($result->login);?></td>
</tr>
<tr align="center">
<td>Mot De passe : </td>
<td><?php echo($result->pwd) ; ?></td>
</tr>
<tr align="center">
<td>Date D'entree : </td>
<td><?php echo($result->dateentree) ; ?></td>
</tr>
<tr align="center">
<td>Sexe : </td>
<td><?php echo($result->sexe) ; ?></td>
</tr>
<tr align="center">
<td>Ville : </td>
<td><?php echo($result->ville) ; ?></td>
</tr>
<tr align="center">
<td>Code Postal : </td>
<td><?php echo($result->codepostal) ; ?></td>
</tr>
<tr align="center">
<td>Mail : </td>
<td><?php echo($result->mail) ; ?></td>
</tr>
<tr align="center">
<td>Age : </td>
<td><?php echo($result->age) ; ?></td>
Quand je me logue tous va bien dans l'url j'ai sa :

http://localhost/espacemembres/membres. ... in=kevin42

Mais mon problème c'est que quand je tape un autre pseudo a la place de kevin42 qui est inscrit dans la base de donné il m'affiche les informations de l'autre pseudo quand j'ai rentré à la main.
Hors je voudrais afficher un message pour dire que l'accès est interdit.

Comment faire ?

Merci de votre aide.

Re: Securisation page membre

Posté : 08 avr. 2011, 22:09
par Ryle
Il te faut stocker en session une information qui te permette d'identifier la personne qui est connectée. Tu pourras ainsi facilement vérifier s'il est autorisé ou non à consulter la page qu'il demande, en comparant par exemple le pseudo demandé à celui stocké en session :)

Re: Securisation page membre

Posté : 08 avr. 2011, 22:09
par prohand
As-tu un exemple de code ?

Merci

Re: Securisation page membre

Posté : 08 avr. 2011, 22:14
par prohand
J'ai crée une page verif.php
<?php
session_start();

if(!isset($_SESSION['login'])) {
  echo '<center>Vous n\'êtes pas autorisé à acceder à cette zone</center>';
  include('login.php');
  exit;
}
?> 
Je l'ai inclus dans ma page membres.php et il me dit :
Vous n'êtes pas autorisé à acceder à cette zone


Merci
Notice: A session had already been started - ignoring session_start() in C:\wamp\www\espacemembres\login.php on line 3

Re: Securisation page membre

Posté : 08 avr. 2011, 22:15
par prohand
J'ai enlever le session start dans ma page login

Et il m'indique plus que sa : vous n'êtes pas autorisé à acceder à cette zone

mlerci

Re: Securisation page membre

Posté : 09 avr. 2011, 03:14
par - HXSS -
le session start doit être envoyé avant le code html, est-ce bien le cas ?

Re: Securisation page membre

Posté : 09 avr. 2011, 13:16
par prohand
Oui c'est bien le cas.

Voici ma page membres.php :
<?php
include('config.php');
include('verif.php');
session_start();
?>
<head>
<title>Page Membres</title>
</head> 
<?php
 //récupération de l'identifiant de la personne:
$Login  = $_GET["Login"] ;
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
$sql=$connexion->query("SELECT * FROM membres WHERE Login = '$Login' ");// on va chercher tous les membres
$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet

if( $result = $sql->fetch() ) // on récupère la liste des membres

       echo(
           "<div align=\"center\">"
           
           ." <a href=\"modifmembres.php?id=".$result->id."\">modifier</a></div>\n"
       ) ;
   
?>
    
   
   <table border="0" align="center" cellspacing="2" cellpadding="2">
   <tr align="center">
 <td>Login : </td>
<td><?php echo($result->login);?></td>
</tr>
<tr align="center">
<td>Mot De passe : </td>
<td><?php echo($result->pwd) ; ?></td>
</tr>
<tr align="center">
<td>Date D'entree : </td>
<td><?php echo($result->dateentree) ; ?></td>
</tr>
<tr align="center">
<td>Sexe : </td>
<td><?php echo($result->sexe) ; ?></td>
</tr>
<tr align="center">
<td>Ville : </td>
<td><?php echo($result->ville) ; ?></td>
</tr>
<tr align="center">
<td>Code Postal : </td>
<td><?php echo($result->codepostal) ; ?></td>
</tr>
<tr align="center">
<td>Mail : </td>
<td><?php echo($result->mail) ; ?></td>
</tr>
<tr align="center">
<td>Age : </td>
<td><?php echo($result->age) ; ?></td>
Ma page login.php :
<?php
session_start();
    if(isset($_POST['tbx_login'])==true) // On verifie que le champ a bien été posté, si oui on continue
    {
		$login=$_POST['tbx_login']; // Recuperation du login entré dans le champ ( On le met dans une variable )
		$pass=$_POST['tbx_pass'];  // Pareil que le login
	
		if(VerifLogin($login,$pass)==true) // On regarde dans la fonction si elle nous retourne true
		{
			$_SESSION['LoginOK']=1; // Si la fonction retourne true alors on autorise le login et on redirige sur la page membre
            header("Location:membres.php?Login=".$login.""); 		
		}
		else
		{
			$_SESSION['LoginOK']=0; // Sinon on refuse le login.
			
		}
		
		

    }
?>
<form action="login.php" method="post">
<center><img src="images/login.png"></center>
<center><TABLE BORDER="1"><tr><th><center>Login : </center><input type="text" name="tbx_login" value="<?php if(isset($_POST["tbx_login"])){echo $_POST['tbx_login'];}?>" /></th></tr><br />
    <tr><th><center>Mot De Passe : </center><input type="password" name="tbx_pass" value="" /></th></tr><br />
    <tr><th><input type="submit" value="envoyer"></tr></th>
</form><center></TABLE> </center>
<?php
function VerifLogin($login,$pass)
{
        include('config.php');
		$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
		$sql=$connexion->query("SELECT login,pwd FROM membres"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
		$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		while( $data = $sql->fetch() ) 
	
        {
           if($data->login==$login) // On recupere le login et on le met dans la variable Login
           {
             if($data->pwd==$pass) // On recupere pwd et on le met dans la variable pass
              {
               $sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		       return true;
		      }
			  else
			  {
			   echo("Le mot de passe n'est pas correct");
			  }
		   }
		    else
		   {
		    echo("Le nom d'utilisateur n'est pas correct");
		   }
				
		}
	
		$sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		return false;
}

?>
Et le verif .php :
<?php
session_start();

if(!isset($_SESSION['login'])) {
  echo '<center>Vous n\'êtes pas autorisé à acceder à cette zone</center>';
  include('login.php');
  exit;
}
?> 

Merci de votre aide.

Re: Securisation page membre

Posté : 09 avr. 2011, 14:00
par - HXSS -
avant le code html, cela veut dire avant la balise <html> or là, sur la page membre il est avant la balise <head> et la page login avant la balise <form>

Re: Securisation page membre

Posté : 09 avr. 2011, 14:46
par prohand
Ok ilaut juste que je mette une balise html apres la session start sur les deux pages ?
Je testerai ce soir :)

Re: Securisation page membre

Posté : 09 avr. 2011, 16:19
par prohand
Sa ne fonctionne pas :

membres.php
<?php
include('config.php');
include('verif.php');
session_start();
?>
<html>
<head>
<title>Page Membres</title>
</head> 
<?php
 //récupération de l'identifiant de la personne:
$Login  = $_GET["Login"] ;
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
$sql=$connexion->query("SELECT * FROM membres WHERE Login = '$Login' ");// on va chercher tous les membres
$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet

if( $result = $sql->fetch() ) // on récupère la liste des membres

       echo(
           "<div align=\"center\">"
           
           ." <a href=\"modifmembres.php?id=".$result->id."\">modifier</a></div>\n"
       ) ;
   
?>
    
   
   <table border="0" align="center" cellspacing="2" cellpadding="2">
   <tr align="center">
 <td>Login : </td>
<td><?php echo($result->login);?></td>
</tr>
<tr align="center">
<td>Mot De passe : </td>
<td><?php echo($result->pwd) ; ?></td>
</tr>
<tr align="center">
<td>Date D'entree : </td>
<td><?php echo($result->dateentree) ; ?></td>
</tr>
<tr align="center">
<td>Sexe : </td>
<td><?php echo($result->sexe) ; ?></td>
</tr>
<tr align="center">
<td>Ville : </td>
<td><?php echo($result->ville) ; ?></td>
</tr>
<tr align="center">
<td>Code Postal : </td>
<td><?php echo($result->codepostal) ; ?></td>
</tr>
<tr align="center">
<td>Mail : </td>
<td><?php echo($result->mail) ; ?></td>
</tr>
<tr align="center">
<td>Age : </td>
<td><?php echo($result->age) ; ?></td>
</html>
login.php :

<?php
session_start();
    if(isset($_POST['tbx_login'])==true) // On verifie que le champ a bien été posté, si oui on continue
    {
		$login=$_POST['tbx_login']; // Recuperation du login entré dans le champ ( On le met dans une variable )
		$pass=$_POST['tbx_pass'];  // Pareil que le login
	
		if(VerifLogin($login,$pass)==true) // On regarde dans la fonction si elle nous retourne true
		{
			$_SESSION['LoginOK']=1; // Si la fonction retourne true alors on autorise le login et on redirige sur la page membre
            header("Location:membres.php?Login=".$login.""); 		
		}
		else
		{
			$_SESSION['LoginOK']=0; // Sinon on refuse le login.
			
		}
		
		

    }
?>
<html>
<form action="login.php" method="post">
<center><img src="images/login.png"></center>
<center><TABLE BORDER="1"><tr><th><center>Login : </center><input type="text" name="tbx_login" value="<?php if(isset($_POST["tbx_login"])){echo $_POST['tbx_login'];}?>" /></th></tr><br />
    <tr><th><center>Mot De Passe : </center><input type="password" name="tbx_pass" value="" /></th></tr><br />
    <tr><th><input type="submit" value="envoyer"></tr></th>
</form><center></TABLE> </center>
</html>
<?php
function VerifLogin($login,$pass)
{
        include('config.php');
		$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
		$sql=$connexion->query("SELECT login,pwd FROM membres"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
		$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		while( $data = $sql->fetch() ) 
	
        {
           if($data->login==$login) // On recupere le login et on le met dans la variable Login
           {
             if($data->pwd==$pass) // On recupere pwd et on le met dans la variable pass
              {
               $sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		       return true;
		      }
			  else
			  {
			   echo("Le mot de passe n'est pas correct");
			  }
		   }
		    else
		   {
		    echo("Le nom d'utilisateur n'est pas correct");
		   }
				
		}
	
		$sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		return false;
}

?>

Merci de votre aide.

Re: Securisation page membre

Posté : 09 avr. 2011, 16:46
par moogli
salut,

ton problème est simple tu créer $_SESSION['LoginOK'] dans login.php et tu test si $_SESSION['login'] existe dans vérif.php ce qui explique le message d'erreur ....

@+

Re: Securisation page membre

Posté : 09 avr. 2011, 16:57
par prohand
Sa a fonctionné mais maitnenant j'ai beau changé le pseudo dans l'url est j'ai accès à tous les pseudos.
Je voudrais que même si on change le login dans l'url on ai pas accès à different login que celui avec lequel on c'est loggué.

Re: Securisation page membre

Posté : 09 avr. 2011, 17:05
par moogli
mwé,

a tu compris le code que tu a fait (copier ?).

La base c'est de pouvoir différencier la personne connectée des autres, pour cela on utilise soit le pseudo (qu'en général on considère comme unique) soit la clef primaire de la table gérant les utilisateurs.
Il te faut donc
- soit ajouter une variable de session contenant le pseudo ou la clef primaire
- soit modifier le code actuel pour que la variable de session contienne pseudo ou clef primaire ;)


@+

Re: Securisation page membre

Posté : 09 avr. 2011, 17:38
par prohand
Je suis vraiment perdu :(

Re: Securisation page membre

Posté : 09 avr. 2011, 18:16
par prohand
Jai essayé sa :

Page login :
<?php
session_start();
    if(isset($_POST['tbx_login'])==true) // On verifie que le champ a bien été posté, si oui on continue
    {
		$login=$_POST['tbx_login']; // Recuperation du login entré dans le champ ( On le met dans une variable )
		$pass=$_POST['tbx_pass'];  // Pareil que le login
	
		if(VerifLogin($login,$pass)==true) // On regarde dans la fonction si elle nous retourne true
		{
			$_SESSION['LoginOK']=$login;			// Si la fonction retourne true alors on autorise le login et on redirige sur la page membre
			header("Location:membres.php?Login=".$login.""); 		
		}
		else
		{
			$_SESSION['LoginOK']=0; // Sinon on refuse le login.
			
		}
		
		

    }
?>
<html>
<form action="login.php" method="post">
<center><img src="images/login.png"></center>
<center><TABLE BORDER="1"><tr><th><center>Login : </center><input type="text" name="tbx_login" value="<?php if(isset($_POST["tbx_login"])){echo $_POST['tbx_login'];}?>" /></th></tr><br />
    <tr><th><center>Mot De Passe : </center><input type="password" name="tbx_pass" value="" /></th></tr><br />
    <tr><th><input type="submit" value="envoyer"></tr></th>
</form><center></TABLE> </center>
</html>
<?php
function VerifLogin($login,$pass)
{
        include('config.php');
		$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
		$sql=$connexion->query("SELECT login,pwd FROM membres"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
		$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		while( $data = $sql->fetch() ) 
	
        {
           if($data->login==$login) // On recupere le login et on le met dans la variable Login
           {
             if($data->pwd==$pass) // On recupere pwd et on le met dans la variable pass
              {
               $sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		       return true;
		      }
			  else
			  {
			   echo("Le mot de passe n'est pas correct");
			  }
		   }
		    else
		   {
		    echo("Le nom d'utilisateur n'est pas correct");
		   }
				
		}
	
		$sql->closeCursor(); // On libère la connexion du serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées
		return false;
}

?>
La pge membres est la même qu'avant

Le la page verif :
<?php

if(!isset($_SESSION['LoginOK'])) {
  echo '<center>Vous n\'êtes pas autorisé à acceder à cette zone</center>';
  include('login.php');
  exit;
}
?> 
Mai il me dit toujours que je n'est pas accès.