Sécuriser des pages web avec les sessions

Résolu/Fermé
Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020 - 7 oct. 2020 à 19:15
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 8 oct. 2020 à 19:32
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';
?>
A voir également:

5 réponses

quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 346
Modifié le 7 oct. 2020 à 19:29
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é.
0
Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020
7 oct. 2020 à 19:41
de quel fichier vous parlez?
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 346 > Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020
8 oct. 2020 à 09:07
Je parles du premier que vous avez mis.
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
8 oct. 2020 à 09:54
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';


0
Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020
Modifié le 8 oct. 2020 à 12:22
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');
?>
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
8 oct. 2020 à 15:19
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é ??!
0
Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020
8 oct. 2020 à 15:59
effectivement tu n'a pas mis de else mais ça ne marche pas sans le else
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
8 oct. 2020 à 16:02
Fais donc un var_dump de la variable $_SESSION et montre nous ce que ça donne...

Bien entendu, tu as mis un session_start dans chacune de tes pages...
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
8 oct. 2020 à 16:04
Ah.. et les lignes
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userid'] = $dn['id'];
 


Sont a mettre après traitement de ta requête sql...
0
Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
8 oct. 2020 à 17:05
J'ai mis les session à var_dump mais c'est pareil.
Connexion.php
<?php
session_start();
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

var_dump($_SESSION['username'] = $username);
var_dump($_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
		}
	}

?> 


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);

var_dump($_SESSION['username'] = $username);
var_dump($_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';
?>
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020
8 oct. 2020 à 17:09
Tu n'as pas compris ce que je t'ai demandé... et visiblement tu ne connais pas grand chose au php...
donc, remets le code comme il était avant....
et ajoute, juste après le session_start();
la ligne
var_dump($_SESSION);
0
Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
8 oct. 2020 à 17:34
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
		}
	}

?> 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mikebiz Messages postés 28 Date d'inscription vendredi 3 juillet 2020 Statut Membre Dernière intervention 17 décembre 2020
8 oct. 2020 à 18:26
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
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
8 oct. 2020 à 19:32
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 !!! ";
?>
0