Easy-Micro

LANGAGE Langage PHP
Sécurité

Gestion de la sécurité dans les templates

Pages autorisées

Pour éviter une saisie directe dans la barre d'adresse d'un fichier malveillant, on crée une liste de pages autorisées.

<?php
// création d'un tableau associatif qui liste les pages autorisées
$pages_autorisees = array('Accueil' =>'accueil.php','Page1' => 'page1.php','Page2' => 'page2.php');
?>
 
<html><head></head>
<body>
Menu:<br>
<a href="index.php?page=Accueil">Accueil</a><br>
<a href="index.php?page=Page1">Page 1</a><br>
<a href="index.php?page=Page2">Page 2</a><br><br>
 
<?php
// test si la variable 'page' est définit ET si elle est dans le tableau '$pages_autorisees'
if ( (isset($_GET['page'])) && (in_array($_GET['page'],$pages_autorisees)) ) {
   require_once($pages_autorisees[$_GET['page']]);
} else {
   require_once('accueil.php');
}
?>
</body></html>

Pages autorisées dynamique

Mais le problème est qu'il faut remplir "à la main" le tableau des noms de pages autorisées. Voici une solution pour un remplissage dynamique :

Remplissage dynamique de la matrice $pages_autorisees
<?php
$dossier = opendir("."); // Ouvrir le dossier courant
$i = 0;
// Tant que l'on peut lire des noms de fichiers
while($fichier = readdir($dossier)) {
     // si les noms ne sont pas ".." et vide
     if ($fichier != ".." && $fichier != "") {
        $pages_autorisees[$i] = $fichier; // On stocke dans la matrice
        $i++;
     }
}
closedir($dossier); // On ferme le dossier
?>
<html><head></head>
<body>
... le reste du code

Exemple complet: remplissage dynamique et affichage dynamique du menu

<?php
// on récupère le nom de la page
if (isset($_GET['page'])) {
$page = $_GET['page'];
}
else {
$page = 'accueil.php';
}
 
// remplissage dynamique des pages autorisées
$dossier = opendir("rep"); // on ouvre le dossier "rep"
$i = 0;
// tant que l'on peut lire des noms de fichiers
while($fichier = readdir($dossier)) {
     // et si les noms ne sont pas ".." et vide
     if ($fichier != "." && $fichier != ".." && $fichier != "") {
     $pages_autorisees[$i] = $fichier; // on les stockes dans la matrice
     $i++;
     }
}
closedir($dossier); // on ferme le dossier
?>
 
<html>
<head></head>
<body>
<h3>Menu dynamique:<br />|
<?php
for($i = 0; $i < count($pages_autorisees); $i++) {
	$pages_menu = substr($pages_autorisees[$i],0,-4); // pour enlever le ".php" à l'écran
	echo '<a href="index.php?page='.$pages_autorisees[$i].'">'.ucfirst($pages_menu).'</a> | ';
}
?></h3>
 
<h2>
<?php
if (file_exists("rep/".$page) && in_array($page,$pages_autorisees)) {
	require_once("rep/".$page); } else { require_once('rep/accueil.php'); }
?></h2>
</body>
</html>

Vous pouvez aussi utiliser la variable prédéfinit $_GET[] pour réaliser une gestion dynamique de variables


< Page précédente LANGAGE PHP