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

Formation

En Semi-présenciel Paris

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En semi-présentiel

  • Lieu

    Paris

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Les sites et dates disponibles

Lieu

Date de début

Paris ((75) Paris)
Voir plan
7 Cité Paradis, 75010

Date de début

Consulter

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

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.

Je tiens à vous mettre en garde : cette sécurité est toute relative. Elle permet uniquement d'éviter qu'une personne qui tomberait par hasard sur le site puisse consulter le contenu des pages sans être identifiée. Un :pirate: mal intentionné aura vite fait, je pense, de contourner la difficulté.

L'index et l'identificationDéclaration des variables1) 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

Je vais le découper en plusieurs morceaux pour que vous puissiez bien en saisir la structure. Mais tout est à mettre sur une seule et même page intitulée index.php. ;)

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

Le principe est grosso modo le même que pour la page d'index. Mais cette fois, il n'y a pas de page d'identification.

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>

Si le visiteur ne s'est pas identifié (s'il a tapé directement l'adresse de la page), il faut lui demander de s'identifier et on lui affiche une autre page.

<?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. :) ?> La déconnexion

Pour clôturer le site proprement, il est de bon ton de se déconnecter. Même si l'utilisateur ne le fait pas et ferme la fenêtre du navigateur, la session est quand même en théorie supprimée.

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 :-° ).

Il doit être placé sur toutes vos pages quelle que soit sa forme (lien basique ou formulaire).

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

Cette méthode peut être pratique mais je tiens à préciser que je ne suis pas responsable de l'utilisation que vous en ferez. :-°

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

  • #
Waouh !

Très heureux de voir que nos cours vous plaisent, déjà 3 pages lues aujourd'hui ! Vous pouvez continuer la lecture de nos cours en devenant un Roomie, un membre de la communauté d'OpenClassrooms. C'est gratuit !

Vous pourrez aussi suivre votre avancement dans le cours, faire les exercices et discuter avec les autres Roomies.

S'inscrire Se connecter
  • Thématiques du cours : PHP Web

Chaque cours est créé par un professeur ou un expert dans le domaine. Il est composé d'une ou plusieurs parties et peut comporter du texte, des images (schéma, illustration) et des vidéos. Chaque partie d'un cours certifiant est ponctuée d'exercices de 2 types : Des quiz corrigés automatiquement Des devoirs libres (exemple : créer un site web avec des consignes précises). Ces devoirs sont évalués par les pairs. Chaque devoir est corrigé 3 fois par 3 autres élèves, dans un processus en double aveugle, selon un barème fixé par le professeur. La note finale est la moyenne des 3 notes reçues sur le devoir. 50% des devoirs corrigés par les pairs obtiennent quasiment les 3 mêmes notes, avec une variance inférieure à 1. La recherche...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

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

Prix sur demande