<< Retour au sommaire

 

La sécurité avec le PHP

 

 

 

Le sommaire :

1.      Présentation.

2.      En pratique :

2.1  L’index,

2.2  La fonction de vérification d’accès,

2.3  Les pages protégées.

3. Essai & téléchargement.

 

Présentation

 

Dans certains cas de figures, le Webmaster peut exiger le passage obligatoire par la page d’accueil du site.

C’est le cas par exemple si l’utilisateur doit s’identifier !

 

Et pourtant, la diffusion de liens directs de pages va bon train et les pages d’accueils sont souvent ignorées.

 

Dans ce manuel, nous allons étudier l’une des nombreuses manières d’éviter ce genre d’accès…

 

Le but du jeu est simple, lorsqu’un utilisateur ouvre une page du site autre que la page d’accueil, l’ouverture est réorientée vers cette » dernière, obligeant ainsi l’utilisateur de procéder à son identification.

Ici, nous n’allons pas nous attarder sur l’aspect technique lié à l’identification.

Pour qu’une identification puisse avoir lieue, il existe beaucoup de solutions, dont l’enregistrement d’un « nom utilisateur » et d’un mot de passe dans un fichier de données.

 

Ensuite, le principe est simple, on crée une variable de session qui va jouer le rôle de témoin d’identification.

 

Quelques explications :

On va utiliser une solution qui est très exploitée en PHP, c’est :

« Associer l’existence d’une variable de session à un évènement précis ».

 

A l’ouverture de la page d’accueil, et après l’identification réussie de la part de l’utilisateur, on crée une variable de session qui, du coup, n’existerait pas si cette étape était contournée.

La manœuvre est donc relativement simple, si l’utilisateur remplit les conditions pré requises de consultation du site, la variable de session existe, sinon, elle n’existe pas.

Seules "l’existence" ou la "non existence" de cette variable détermine la situation liée à l’autorisation…

 C’est tout ce qu’il nous faut…

 

Par conséquent, à l’ouverture de chaque page du site, excepté bien sûr pour la page d’accueil, on vérifie l’existence de la variable de session.

Si la variable existe, on ne fait rien, la page s’ouvre.

Si la variable n’existe pas, on réoriente l’exécution vers la page d’accueil.

 

Pour ce faire, je dois rappeler quelques aspects techniques :

 

Premièrement, il faut se rappeler que, contrairement aux variables locales, une variable de session n’est pas détruite lors de la fermeture d’une page. La variable de session est donc en fait une variable globale.

 

Deuxièmement, afin de pouvoir utiliser une variable de session, il faut que le code du fichier débute par la fonction :

SESSION_START ();

 

Troisièmement, Pour vérifier si une variable de session existe, il faut utiliser la fonction « isset » comme condition à un embranchement conditionnel « if ». Le paramètre de cette fonction étant bien sûr le nom de la variable de session pour laquelle on souhaite vérifier l’existence.

Par exemple :

if (isset($_SESSION["MaVariable"]))

 

Cinquièmement, pour créer une variable de session, il suffit de la pondre en lui affectant une chaîne vide, puisque sa valeur n’a vraiment aucune importance…

Par exemple :

$_SESSION["MaVariable"] = "";

 


En pratique

 

L’index

 

Dans ce chapitre, nous allons considérer que l’identification est liée au passage obligatoire par la page d’accueil.

 

Nous devons donc commencer le code de la page d’accueil par la création d’une variable de session, nous allons lui donner un nom très parlant, ce sera :

$_SESSION["identification-ok"]

 

Le code :

 

<?php

// Déclaration de l'emploi des variables de session

SESSION_START ();

// Création de la variable de session

$_SESSION["identification-ok"] = ""; ?>

<!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" >

<head>

<title>La fameuse page d'accueil</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>

<h1>Hello !</h1>

<pre>

Voici les 3 sujets proposés par notre super site :

<ul>

<li>

<a href="page01.php">

Le code secret pour s'introduire dans la caverne d'Alibaba

</a></li>

<li>

<a href="page02.php">

Le véritable nom de CONAN le barbar

</a></li>

<li>

<a href="page03.php">

Liste des nanas qui m'aiment

</a></li>

</pre>

</body>

</html>

 


La fonction de vérification d’accès

 

Les pages du sites sont automatiquement soumises à un contrôle d’accès par le biais de la fonction intitulée « autorisation » qui est écrite dans le fichier des fonctions externes « fonctions.inc ».

 

Voici le code de ce fichier :

 

<?php

// fichier de fonctions externes

// Déclaration de l'emploi des variables de session

SESSION_START ();

function autorisation () {

 // Fonction qui vérifie l'existence de la variable de session

 if (isset($_SESSION["identification-ok"])) {

 // La variable existe bien, renvoie "vrai"

 return "vrai"; }

else {

 // La variable n'existe pas, renvoie faux

 return "faux"; }} ?>

 


Les pages protégées

 

Voici le code des 3 pages du sites qui sont protégées :

 

Page01.PHP :

 

<?php

// Inclusion des fonctions externes

include ("fonctions.inc");

// Vérifie si l'utilisateur est passé par la page d'accueil

if (autorisation()=="faux") {

 // L'utilisateur est un pirate !

 // Orientation de l'exécution vers la page d'accueil

 header ("location:index.php"); } ?>

<!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" >

<head>

<title>La caverne d'Alibaba</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>

<table border="1">

<caption>

Salut visiteur

</caption>

<tr><td>

Le code secret est <br />

skdfuqsl zlkfqsfukls f8456 4fsq65d4f765ze fgsfsqklj sdfqgvdqs65 qsdfjsqdjkyfhkze; s6d574674 65g4qsdf657465 4qe65gd465sd 465q4sg6d574ff654qs654g68e q4te4f65 4ea65q4f6qs4 65eq7tz3eqsd4gf 6465des4g65q4

</td></tr>

<tr><td align="center">

<a href="index.php">

Retour page d'accueil</a></td></tr></table>

</body>

</html>

 


Page02.PHP :

 

<?php

// Inclusion des fonctions externes

include ("fonctions.inc");

// Vérifie si l'utilisateur est passé par la page d'accueil

if (autorisation()=="faux") {

 // L'utilisateur est un pirate !

 // Orientation de l'exécution vers la page d'accueil

 header ("location:index.php"); } ?>

<!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" >

<head>

<title>Conan le barbar</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>

<table border="1">

<caption>

Mon dieu, le moment de vérité

</caption>

<tr><td>

Le véritable nom de Conan le barbar est bien sûr :<br />

Monsieur Philippe BOULANGER !

</td></tr>

<tr><td align="center">

<a href="index.php">

Retour page d'accueil</a></td></tr></table>

</body>

</html>

 


Page03.php :

 

<?php

// Inclusion des fonctions externes

include ("fonctions.inc");

// Vérifie si l'utilisateur est passé par la page d'accueil

if (autorisation()=="faux") {

 // L'utilisateur est un pirate !

 // Orientation de l'exécution vers la page d'accueil

 header ("location:index.php"); } ?>

<!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" >

<head>

<title>Super confidence</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>

<table border="1">

<caption>

Catastrophe

</caption>

<tr><td>

Voici la liste des nanas amoureusent de Philippe :<br />

<ul>

<li>0 pour l'instant.</li>

</ul>

</td></tr>

<tr><td align="center">

<a href="index.php">

Retour page d'accueil</a></td></tr></table>

</body>

</html>

 


Essai & téléchargement

 

Le lien vers la page d’accueil :

Ouvrir la page d’accueil >>

 

Le lien vers une page protégée :

Ouvrir une page protégée histoire de vous faire éjecter à la page d’accueil >>

 

Pour télécharger l’exemple ?

Cliquez ici pour télécharger l’exemple >>

 

Philippe BOULANGER