Version en ligne

Tutoriel : Protéger plusieurs pages d'un site en utilisant les sessions

Table des matières

Protéger plusieurs pages d'un site en utilisant les sessions
L'index et l'identification
Page quelconque
La déconnexion

Protéger plusieurs pages d'un site en utilisant les sessions

L'index et l'identification

En rédigeant un site professionnel, j'ai été confronté à la nécessité d'en sécuriser les données. Je me suis basé sur le cours de PHP de M@teo21 et sur quelques conseils que j'ai pu glaner sur le forum du SdZ (merci à greenpinguin :p ) afin de sécuriser mes pages.

L'index et l'identification

Page quelconque

Déclaration des variables

1) La "session_start();"

Cette fonction permet de récupérer les variables $_SESSION[] sur toutes les pages où elle aura été réalisée. On doit la placer avant tout code HTML, sur toutes les pages à sécuriser.

2) La variable "$_SESSION['connect'];"

Par défaut, on lui donne comme valeur "0". Vous pouvez lui donner le nom que vous voulez, mais connect est assez parlant je trouve. :D Elle prendra la valeur "1" lorsque l'identification aura été vérifiée.

3) Les variables transmises par le formulaire d'identification

Elles sont transmises par la méthode "post". On les nomme $_POST['login'] et $_POST['mot_de_passe']. Elles vont nous permettre de savoir si la personne qui s'est identifiée est bien une de celles que l'on attend.

Le code de l'index

J'ai placé des commentaires après chaque ligne afin de vous permettre de bien en comprendre le sens.

<?php
session_start();// À placer obligatoirement avant tout code HTML.
 
$_SESSION['connect']=0; //Initialise la variable 'connect'.
 
if (isset($_POST['mot_de_passe']) AND isset($_POST['login'])) // Si les variables existent.
{
        $mot_de_passe=$_POST['mot_de_passe'];
        $login=$_POST['login'];//On récupère les données envoyées par la méthode POST du formulaire d'identification.
}
 
else // Les variables n'existent pas encore.
{
        $mot_de_passe="";
        $login="";// On crée des variables $mot_de_passe  et $login vides.
}
 
if (($mot_de_passe == "SITEDUZERO" AND $login == "ZOZOR") OR ($mot_de_passe == "MONSITEAMOI" AND $login == "POILU")OR ($mot_de_passe == "NONMONMIEN" AND $login == "ZOZORETTE") OR ($mot_de_passe == "KANGOUROU" AND $login == "JERRY"))
// Si le mot de passe et le login sont bons (valable pour 1 utilisateur ou plus). J'ai mis plusieurs identifiants et mots de passe.
 
{
        $_SESSION['connect']=1; // Change la valeur de la variable connect. C'est elle qui nous permettra de savoir s'il y a eu identification.
        $_SESSION['login']=$login;// Permet de récupérer le login afin de personnaliser la navigation.
// On affiche la page cachée.
?>

Et le code HTML de la page cachée en exemple :

Ce code est donc celui que vous souhaitez protéger.

Nous allons voir maintenant celui de la page d'identification.

Il fait appel aux formulaires. Je ne m'étendrai pas dessus car c'est un simple code HTML.

Il doit être placé entre deux bouts de code PHP afin de finaliser celui commencé plus haut :

<?php
}
 
else // Le mot de passe n'est pas bon.
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Identification</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <link rel="stylesheet" media="screen" type="text/css" title="TNM" href="design_accueil.css" />
        <!-- Lien vers la favicon -->      
   <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" height="48" width="48"/>
    </head>
    <body>
   
    <!-- Le corps -->
   
     <div id="corps">
<p>Veuillez vous identifier pour accéder au site :</p>
 
<form action="index.php" method="post">
<p>
Votre login : <input type="text" name="login"/>
Votre mot de passe : <input type="password" name="mot_de_passe"/><input type="submit" value="Valider"/>
</p>
</form>
        </div>
       
        <!-- Le pied de page -->
 
           <div id="pied_de_page1">
           
       </div>
       
    </body>
</html>
<?php
 
} // Fin du else.
 
// Fin du code. :)
?>

Voilà. Nos pages index et identification sont finies (en fait c'est la même page mais l'affichage est fonction du code PHP).

Nous allons voir maintenant la structure d'une autre page du site.


Page quelconque

Page quelconque

L'index et l'identification La déconnexion

Vérification des variables

La première chose à faire est de vérifier que l'identification a bien eu lieu. Cela se traduit par le fait que la variable $_SESSION['connect'] est passée de l'état "0" à l'état "1" (voir code PHP de l'index :) ). Si c'est le cas, on affiche la page. Sinon, on demande au visiteur de s'identifier.

Là encore, il est nécessaire de placer session_start(); avant tout code XHTML.

Un petit code vaut mieux qu'un long discours : :lol:

<?php
session_start();
if (isset($_SESSION['connect']))//On vérifie que le variable existe.
{
        $connect=$_SESSION['connect'];//On récupère la valeur de la variable de session.
}
else
{
        $connect=0;//Si $_SESSION['connect'] n'existe pas, on donne la valeur "0".
}
       
if ($connect == "1") // Si le visiteur s'est identifié.
{
// On affiche la page cachée.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
<title>Site super</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 
   <!-- Lien vers la favicon -->               
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"/>
   <!-- Ci-dessous le design "par défaut" du site -->
<link rel="stylesheet" media="screen" type="text/css" title="design" href="design_par_defaut.css" />
   </head>
 
   <body>
       <div id="en_tete">           
       </div>
          
        <div id="menus">
        </div>
 
       <!-- Le corps -->
 
       <div id="corps">
 
 
<h1>Blabla</h1>
<p>Que du blabla sur mon site</p>
 
       </div>
 
       <!-- Le pied de page -->
 
       <div id="pied_de_page">
           
       </div>
 
   </body>
</html>
<?php
}
 
else // Le mot de passe n'est pas bon.
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
<title>Visiteur inconnu</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="suite" href="design_accueil.css" />
        <!-- Lien vers la favicon -->      
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" height="48" width="48"/>
    </head>
 
    <body>
   
    <!-- Le corps -->
   
     <div id="corps">
<p>Veuillez vous identifier pour accéder au site :</p>
 
<form action="index.php" method="post">
<p>
<input type="submit" value="OK" />
</p>
</form>
        </div>
       
        <!-- Le pied de page -->
 
           <div id="pied_de_page1">
           
       </div>
       
    </body>
</html>

Et on finit le code PHP précédemment commencé car là encore, tout ne tient en fait que sur une seule page. ^^

<?php
 
} // Fin du else.
 
// Fin du code. :)
?>

L'index et l'identification La déconnexion

La déconnexion

Page quelconque

Le mieux, pour que l'utilisateur pense à se déconnecter, est de mettre le bouton de déconnexion en évidence. J'utilise pour ma part un formulaire, car cela permet d'avoir un bouton facilement mis en page (je suis un peu feignasse, je dois l'avouer :-° ).

Voici ce que j'utilise.

<p>
<form action="déconnexion.php" method="post">
<p>
<input type="submit" value="Déconnexion" />
</p>

Une fois sur la page de déconnexion, il est nécessaire de "mettre à jour" les variables $_SESSION et d'effacer ce qu'elles pourraient éventuellement contenir.

Pour cela, je vous conseille de "ratisser" large.

Pour pouvoir les effacer, il faut tout d'abord pouvoir les appeler. :p
À nouveau, une session_start(); est nécessaire.

Les sessions étant des arrays, on va tout simplement en vider le contenu par la ligne de code suivante :

$_SESSION = array();

Un cookie est automatiquement généré lors de l'utilisation des sessions. Il est normalement effacé à la clôture de la session. Par précaution, il vaut mieux l'effacer manuellement en procédant ainsi :

if (isset($_COOKIE[session_name()]))
{setcookie(session_name(),'',time()-4200,'/');}

Ensuite, et c'est fini, on détruit la session avec la fonction session_destroy();.

Le code de la page se résume donc ainsi :

<?php
session_start();
 
$_SESSION = array();
if (isset($_COOKIE[session_name()]))
{setcookie(session_name(),'',time()-4200,'/');}
 
session_destroy();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
<title>Au revoir</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
               
   <!-- Lien vers la favicon -->               
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" height="48" width="48"/>
   <!-- Ci-dessous le design "par d&eacute;faut" du site -->
<link rel="stylesheet" media="screen" type="text/css" title="TNM" href="design_accueil.css" />
   
   </head>
 
   <body>
   
       
       <div id="corps">
<h1 style="color-font: #6ba5ef; font-size: 2em;">Vous êtes à présent déconnecté</h1>
 
<form action="index.php" method="post">
<p>
<input type="submit" value="OK"/>
</p>
</form>
                </div>
 
 
       <!-- Le pied de page -->
 
       <div id="pied_de_page3">
           
       </div>
 
   </body>
</html>

Mon site est hébergé en intranet, ce qui limite énormément la présence de hackers. :D

Voici quelques liens qui peuvent être utiles et que je vous recommande vivement de lire.
Introduction à la sécurité en PHP : quelques considérations générales sur la sécurité en PHP. Très instructif (de même que les chapitres suivants).
Les sessions : pour ceux qui veulent en savoir plus.

Et je finirai sur ces quelques mots empruntés à ce fameux miguel euh, non, manuel :

Citation : Manuel PHP

Un principe qu'il est bon de retenir : un système est aussi sûr que son maillon le plus faible.

À méditer. ;)


Page quelconque