Sécuriser des pages web avec les sessions

Signaler
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020
-
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
-
Bonsoir

Je souhaiterais sécuriser les pages web de mon logiciel par les sessions de sorte que celui qui ne s'est pas connecté ne puisse pas avoir accès aux pages web. J'ai écris un code mais il ne marche pas aidez-moi.
voici le code :
<?php
session_start();

// on inclu la page de config
//include("config.php");

if(!isset($_SESSION['username']) || !isset($_SESSION['password']))
{
    // si on ne détecte aucune sessions, c'est que cette personne n'est pas connecté
    // on affiche le formulaire de connexion
    echo '<p><b style="color:red">espace sécurisé</b><br />Connecté vous pour accéder à cette page</p>';
    include("bad.php");
    exit();
}
else
{
     header("Location: accueil.php"); 
      exit(); //toujours mettre un Exit apres une redirection ...   
   
}
?>


Voici mon fichier de connexion à la page index (connexion.php)
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
 
// require du config 
require_once 'config.php';
 
// récupération propre des variables avant de les utiliser
 $username = !empty($_POST['username']) ? $_POST['username'] : NULL;
 $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
 
 
 //traitement du formulaire ...
 
 //On verifie si le formulaire a ete envoye
	if($username && $password)	{
		//On echappe les variables pour pouvoir les mettre dans des requetes SQL
		if(get_magic_quotes_gpc()) // get_magic_quotes_gpc => Cette fonction est OBSOLÈTE à partir de PHP 7.4.0. Dépendre de cette fonction est fortement déconseillé. 
		{
			$username = mysqli_real_escape_string(stripslashes($username));
			$password = stripslashes($password);
		}	else		{
			$username = mysqli_real_escape_string($int,$username);
		}
    
		//On recupere le mot de passe de lutilisateur
		$req = mysqli_query($int,'select password,id from users where username="'.$username.'"');
		$dn = mysqli_fetch_array($req);
		
		//On le compare a celui quil a entre et on verifie si le membre existe
		if($dn['password']==$password and mysqli_num_rows($req)>0){
			//Si le mot de passe es bon, on ne vas pas afficher le formulaire
			$form = false;
			//On enregistre son pseudo dans la session username et son identifiant dans la session userid
			$_SESSION['username'] = $username;
			$_SESSION['userid'] = $dn['id'];
			
			if(($username=='admin') and ($password=='admin'))	{
               header("Location: accueil.php");
               exit; // toujours mettre un exit apres une redirection
            }else{
         // si tu n'es pas admin... tu dois faire quoi ??
            echo "toujours en test !";
           }
		
		}	else	{
			//Sinon, on indique que la combinaison nest pas bonne
			header("Location: bad.php");
      exit; // toujours mettre un exit apres une redirection
		}
	}

?> 


Voici le fichier de connexion à la Base de Données (config.php)
<?php
//session_start();

/******************************************************
----------------Configuration Obligatoire--------------
Veuillez modifier les variables ci-dessous pour que l'
espace membre puisse fonctionner correctement.
******************************************************/

//On se connecte a la base de donnee
$host="localhost";
$db="planning";
$user="root";
$password="";
//$db="planninga2i";
//$user="root";
//$password="";
$int=mysqli_connect($host,$user,$password,$db);
//mysql_select_db('basededonne');

//Email du webmaster
$mail_webmaster = ' ';

//Adresse du dossier de la top site
//$url_root = '';

/******************************************************
----------------Configuration Optionelle---------------
******************************************************/

//Nom du fichier de laccueil
$url_home = 'accueil.php';

//Nom du design
$design = 'default';
?>

5 réponses

Messages postés
414
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
13 octobre 2020
195
Bonjour,
Ce que fais votre code actuellement c'est : si on est connecté, alors on redirige vers la page accueil.php. Mais rien n'empêche l'utilisateur d'aller directement sur la page accueil.php sans faire la vérification.
La solution c'est de faire la vérification directement dans la page d'accueil. Si on est connecté, alors on affiche la page, sinon on affiche une erreur ou on redirige vers une autre page.
Comme ça, l'utilisateur ne pourra pas afficher le contenu de accueil.php sans passer par la vérification qu'il est connecté. Évidemment, il faut faire cette condition sur toutes les pages qui necessite d'être connecté.
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020

de quel fichier vous parlez?
Messages postés
414
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
13 octobre 2020
195 >
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Je parles du premier que vous avez mis.
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
2 839
Bonjour,

Dans ton fichier de connexion, tu créés deux variables de session
$_SESSION['username'] = $username;
$_SESSION['userid'] = $dn['id'];

Ce sont ces deux variables ( ou à minima la userid) qu'il faut ensuite utiliser dans
tes autres fichiers.

Dans les fichiers pour lesquels tu veux restreindre l'accès, tu places, au début de ces fichiers
<?php
// démarrage des sessions
session_start();

//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//récupération PROPRE des variables AVANT de les utiliser :
$userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL;
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL;

//on vérifie si les variables de session existent sinon on redirige vers la page de connexion
if(!$userid || !$username ){
  header("Location: bad.php");
  exit();
}

// ensuite... tu peux mettre la suite du code de ta page....
// ....


 
// require du config 
require_once 'config.php';


Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Bonjour Jordane45
Merci pour ta réponse. j'ai fait comme tu as dit, ça a marche d'un côté et ça ne marche pas de l'autre. Qu'est ce que je veux dis? Quand un utilisateur tente de se connecter à une page sans se logger ça le ramène directement à la page de connexion (bad.php) comme je le veux. Mais quand un utilisateur s'est bien logger (avec le login et mot de passe correcte), quand il clique sur le lien de la page ou se trouve le code de restriction, ça le ramène encore sur la page de connexion (bad.php). Qu'est ce qui peut être à l'origine?

Fichier connexion.php
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userid'] = $dn['id'];
 
// require du config 
require_once 'config.php';
 
// récupération propre des variables avant de les utiliser
 $username = !empty($_POST['username']) ? $_POST['username'] : NULL;
 $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
// $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
 
 
 //traitement du formulaire ...
 
 //On verifie si le formulaire a ete envoye
	if($username && $password)	{
		//On echappe les variables pour pouvoir les mettre dans des requetes SQL
		if(get_magic_quotes_gpc()) // get_magic_quotes_gpc => Cette fonction est OBSOLÈTE à partir de PHP 7.4.0. Dépendre de cette fonction est fortement déconseillé. 
		{
			$username = mysqli_real_escape_string(stripslashes($username));
			$password = stripslashes($password);
		}	else		{
			$username = mysqli_real_escape_string($int,$username);
		}
    
		//On recupere le mot de passe de lutilisateur
		$req = mysqli_query($int,'select password,id from users where username="'.$username.'"');
		$dn = mysqli_fetch_array($req);
		
		//On le compare a celui quil a entre et on verifie si le membre existe
		if($dn['password']==$password and mysqli_num_rows($req)>0){
			//Si le mot de passe es bon, on ne vas pas afficher le formulaire
			$form = false;
			//On enregistre son pseudo dans la session username et son identifiant dans la session userid
			$_SESSION['username'] = $username;
			$_SESSION['userid'] = $dn['id'];
			
			if(($username=='A2I-Planning') and ($password=='A2Iplanning@2020'))	{
               header("Location: accueil.php");
               exit; // toujours mettre un exit apres une redirection
            }else{
         // si tu n'es pas admin... tu dois faire quoi ??
            echo "Pas admin !";
           }
		
		}	else	{
			//Sinon, on indique que la combinaison nest pas bonne
			header("Location: bad.php");
      exit; // toujours mettre un exit apres une redirection
		}
	}

?> 


Fichier adduser.php
<?php
// démarrage des sessions
session_start();

//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//récupération PROPRE des variables AVANT de les utiliser :
$userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL;
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL;
$password = !empty($_SESSION['password']) ? $_SESSION['password'] : NULL;

//on vérifie si les variables de session existent sinon on redirige vers la page de connexion
if(!$userid || !$username ){
  header("Location: bad.php");
  exit();
}
else{
     header("Location: adduser.php");
     exit();
	 }
// ensuite... tu peux mettre la suite du code de ta page....
// ....


 
// require du config 
include('config.php');
?>
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
2 839
Si tu es déjà dans le script adduser.php ....
que viennent faire ici ces lignes ???
else{
     header("Location: adduser.php");
     exit();
	 }

Je n'ai jamais mis de ELSE dans le code que je t'ai donné.... pourquoi en avoir ajouté ??!
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020

effectivement tu n'a pas mis de else mais ça ne marche pas sans le else
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020
>
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020

ok, je l'ai fait mais toujours pareil

fichier adduser.php
<?php
// démarrage des sessions
session_start();

var_dump($_SESSION);
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userid'] = $dn['id'];  

//récupération PROPRE des variables AVANT de les utiliser :
$userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL;
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; 

//on vérifie si les variables de session existent sinon on redirige vers la page de connexion
if(!$userid || !$username ){
  header("Location: bad.php");
  exit();
}

// ensuite... tu peux mettre la suite du code de ta page....
// ....
// require du config 
require_once 'config.php';
?>


Fichier connexion.php
<?php
session_start();

var_dump($_SESSION);
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userid'] = $dn['id']; 
 
// require du config 
require_once 'config.php';
 
// récupération propre des variables avant de les utiliser
 $username = !empty($_POST['username']) ? $_POST['username'] : NULL ;
 $password = !empty($_POST['password']) ? $_POST['password'] : NULL ;  
 
 
 //traitement du formulaire ...
 
 //On verifie si le formulaire a ete envoye
	if($username && $password)	{
		//On echappe les variables pour pouvoir les mettre dans des requetes SQL
		if(get_magic_quotes_gpc()) // get_magic_quotes_gpc => Cette fonction est OBSOLÈTE à partir de PHP 7.4.0. Dépendre de cette fonction est fortement déconseillé. 
		{
			$username = mysqli_real_escape_string(stripslashes($username));
			$password = stripslashes($password);
		}	else		{
			$username = mysqli_real_escape_string($int,$username);
		}
    
		//On recupere le mot de passe de lutilisateur
		$req = mysqli_query($int,'select password,id from users where username="'.$username.'"');
		$dn = mysqli_fetch_array($req);
		
		//On le compare a celui quil a entre et on verifie si le membre existe
		if($dn['password']==$password and mysqli_num_rows($req)>0){
			//Si le mot de passe es bon, on ne vas pas afficher le formulaire
			$form = false;
			//On enregistre son pseudo dans la session username et son identifiant dans la session userid
			var_dump($_SESSION['username'] = $username);
			var_dump($_SESSION['userid'] = $dn['id']);
			
			if(($username=='A2I-Planning') and ($password=='A2Iplanning@2020'))		{
        header("Location: accueil.php");
        exit; // toujours mettre un exit apres une redirection
      }else{
         // si tu n'es pas admin... tu dois faire quoi ??
         echo "Pas admin !";
         
      }
		
		}	else	{
			//Sinon, on indique que la combinaison nest pas bonne
			header("Location: bad.php");
      exit; // toujours mettre un exit apres une redirection
		}
	}

?> 
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
2 839 >
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Ce n'est pas dans ton fichier de connexion... mais dans les pages sur lesquelles tu veux "protéger" l'accès....
De plus, le var_dump doit t'afficher des choses à l'écran..... il faudra nous les montrer...
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
2 839 >
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020

Lis les commentaires !
<?php
//----------------------------//
//FICHIER connexion.php
//----------------------------//

session_start();

var_dump($_SESSION);
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

/* -------------  PAS AU BON ENDROIT !!!!
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userid'] = $dn['id']; 
 -----------------------------------*/
 
 
// require du config 
require_once 'config.php';
 
// récupération propre des variables avant de les utiliser
 $username = !empty($_POST['username']) ? $_POST['username'] : NULL ;
 $password = !empty($_POST['password']) ? $_POST['password'] : NULL ;  
 
 
 //traitement du formulaire ...
 
 //On verifie si le formulaire a ete envoye
 if($username && $password) {
  //On echappe les variables pour pouvoir les mettre dans des requetes SQL
  if(get_magic_quotes_gpc()) // get_magic_quotes_gpc => Cette fonction est OBSOLÈTE à partir de PHP 7.4.0. Dépendre de cette fonction est fortement déconseillé. 
  {
   $username = mysqli_real_escape_string(stripslashes($username));
   $password = stripslashes($password);
  } else  {
   $username = mysqli_real_escape_string($int,$username);
  }
    
  //On recupere le mot de passe de lutilisateur
  $req = mysqli_query($int,'select password,id from users where username="'.$username.'"');
  $dn = mysqli_fetch_array($req);
  
  //On le compare a celui quil a entre et on verifie si le membre existe
  if($dn['password']==$password and mysqli_num_rows($req)>0){ // MOT DE PASS NON CRYPTE EN BDD ????  PAS BON !!
   //Si le mot de passe es bon, on ne vas pas afficher le formulaire
   $form = false;
   //On enregistre son pseudo dans la session username et son identifiant dans la session userid
   //var_dump($_SESSION['username'] = $username); FAUX !!
   //var_dump($_SESSION['userid'] = $dn['id']); FAUX !!
      
      $_SESSION['username'] = $username;
      $_SESSION['password'] = $password;
      $_SESSION['userid'] = $dn['id']; 
   
   if( $username=='A2I-Planning' && $password=='A2Iplanning@2020') {
        header("Location: accueil.php");
        exit; // toujours mettre un exit apres une redirection
      }else{
         // si tu n'es pas admin... tu dois faire quoi ??
         echo "Pas admin !";
         
      }
  
  } else {
   //Sinon, on indique que la combinaison nest pas bonne
   header("Location: bad.php");
      exit; // toujours mettre un exit apres une redirection
  }
 }

?> 


<?php
//----------------------------//
//fichier adduser.php
//----------------------------//

// démarrage des sessions
session_start();

var_dump($_SESSION);

//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

/* FAUX ET ARCHI FAUX !! -- GROSSE ERREUR !! LA TU ECRASES LES VARIABLES !!!!!
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userid'] = $dn['id'];  
*/


//récupération PROPRE des variables AVANT de les utiliser :
$userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL;
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; 

//on vérifie si les variables de session existent sinon on redirige vers la page de connexion
if(!$userid || !$username ){
  header("Location: bad.php");
  exit();
}

// ensuite... tu peux mettre la suite du code de ta page....
// ....
// require du config 
require_once 'config.php';

//JUSTE POUR VOIR SI TU ES CONNECTE....
echo " JE SUIS CONNECTE !!! ";
?>
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020
>
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020

Voici ce qu'il affiche:
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
2 839 >
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Ah oui...
bien entendu, pour voir le résultat du var dump ... il faut mettre en commentaire la redirection vers le fichier bad.php

Sinon,, tu pourrais simplement ajouter le var_dump dans ton fichier bad.php ... là on verrait ce que contient tes variables de session.
Messages postés
24
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Quand on se logue et on clique sur le lien adduser.php il affiche ce qui est à l'écran.
Mais quand on ne se logue pas et puis on saisie l'url : adduser.php directement il affiche aussi le même resultat au lieu d'afficher la page de login.
Voici la capture
Messages postés
29735
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
2 839
Est-ce que tu peux modifier ton fichier adduser comme ceci et nous montrer ce que ça t'affiche ?
<?php
//----------------------------//
//fichier adduser.php
//----------------------------//

// démarrage des sessions
session_start();



//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

/* FAUX ET ARCHI FAUX !! -- GROSSE ERREUR !! LA TU ECRASES LES VARIABLES !!!!!
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userid'] = $dn['id'];  
*/


//récupération PROPRE des variables AVANT de les utiliser :
$userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL;
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; 

//on vérifie si les variables de session existent sinon on redirige vers la page de connexion
if(!$userid || !$username){
  //header("Location: bad.php");
  echo " UTILISATEUR NON CONNECTE ! ";
  echo "<pre>";
  var_dump($_SESSION);
   echo "</pre>";
  exit();
}

// ensuite... tu peux mettre la suite du code de ta page....
// ....
// require du config 
require_once 'config.php';

//JUSTE POUR VOIR SI TU ES CONNECTE....
echo " JE SUIS CONNECTE !!! ";
?>