Php - administrer en ligne : protection des pages

PHP - ADMINISTRER en ligne : PROTECTION des PAGES

Principe

  • Création d'un dossier (ADMIN) dans lequel on met ses pages d'administration.
  • Accès à l'"espace d'administration en ligne" : www.MONSITE.com/ADMIN
  • ADMIN/index.php : formulaire d'identification par identifiant et mot de passe. (Ici : un accès à 1 niveau (webmestre))
  • Validation par Cookie OU Session au choix,
  • Comparaison avec un code de validation généré aléatoirement,
  • L'accès aux pages protégées est alors validé.

NB : par sécurité, changez le nom du dossier "ADMIN" (trop évident).

NB : le code de validation est :
- stocké dans une variable de session.
- généré aléatoirement à chaque nouvelle identification.
- n'est valide qu'une fois.

Les fichiers nécessaires (dossier ADMIN)

_protect.php contient vos identifiants et mots de passe
index.php formulaire d'identification
_protectpage.php protection des pages
vos pages à protéger scripts à inclure
_deconnexion.php
déconnexion et retour à votre site

protect.php

partie commune

<?php // partie commune (cookie ou session)
session_start();
// -------------------------------------------------------------------------
$utilisateur = "IDENTIFIANT"; // Remplacer IDENTIFIANT par votre identifiant (au choix)
$mot_de_passe = "MOTDEPASSE"; // Remplacer MOTDEPASSE par votre mot de passe (au choix)
// -------------------------------------------------------------------------
// si le visiteur (administrateur ou collaborateur) a validé le formulaire
$login = '';
$pass = '';
if (!empty($_POST['login']) && !empty($_POST['pass'])) {
    $login = filter_var($_POST['login'], FILTER_SANITIZE_STRING);
    $pass = filter_var($_POST['pass'], FILTER_SANITIZE_STRING);
}
// -------------------------------------------------------------------------
// création d un code de validation aléatoire
// -------------------------------------------------------------------------
$tableau = array("0","1","2","3","4","5","6","7","8","9",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
// Tirage aléatoire de 16 caracteres
$taille = 16;
$valeurs_aleatoires = array_rand($tableau, $taille);
// generation du code
$code_valide = '';
foreach($valeurs_aleatoires as $i)
    { $code_valide = $code_valide . $tableau[$i]; }
// -------------------------------------------------------------------------
// On stocke le code_valide sur le serveur dans une variable de session
$_SESSION["CODEVALIDE"] = $code_valide;
// -------------------------------------------------------------------------
?>
<?php
// (suite avec COOKIE)
// ------------------------------------------------------
// Si le login et le mot de passe sont corrects
if ($login == $utilisateur && $pass == $mot_de_passe) {
    // copie du code dans un cookie "perso"
    setcookie ("MONCOOKIE",$code_valide,time()+3600);
    // ------------------------------------------------------
} else {
    setcookie ("MONCOOKIE", "");
}
?>

suite avec SESSION

<?php
// (suite avec SESSION)
// ------------------------------------------------------
// Si le login et le mot de passe sont corrects
if ($login == $utilisateur && $pass == $mot_de_passe) {
    // copie du code dans une variable de session "perso"
    $_SESSION["MASESSION"] = $code_valide;
    // ------------------------------------------------------
} else {
    $_SESSION["MASESSION"] = '';
}
?>

index.php

<?php // (début avec COOKIE)
include("_protect.php");
// ------------------------------------------------------
// Accès autorisé si identifié
if (!empty($_SESSION['CODEVALIDE']) &&
md5($_COOKIE['MONCOOKIE']) ==
md5($_SESSION["CODEVALIDE"]))
{
    // Redirection vers le menu de l "ADMIN"
    header("Location: MONmenuADMIN.php");
    exit;
}
// ------------------------------------------------------
// sinon affichage du formulaire d'identification
?>

début avec SESSION

<?php // (début avec SESSION)
include("_protect.php");
// ------------------------------------------------------
// Accès autorisé si identifié
if (!empty($_SESSION['CODEVALIDE']) &&
md5($_SESSION["MASESSION"]) ==
md5($_SESSION["CODEVALIDE"]))
{
    // Redirection vers le menu de l "ADMIN"
    header("Location: MONmenuADMIN.php");
    exit;
}
// ------------------------------------------------------
// sinon affichage du formulaire d'identification
?>

suite commune

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>index.php</title>
</head>

<body>
    <div align="center">
        <form name="identification" method="post" action="index.php">
            Identifiant : <input name="login" size="20" /><br />
            Mot de passe : <input name="pass" type="password" size="20" /><br />
            <input type="submit" value="Valider" />
        </form>
    </div>
</body>
</html>

_protectpage.php

<?php // (avec COOKIE)
session_start();
// ------------------------------------------------------
// comparaison avec le code de validation
// si non identifie
if (empty($_SESSION['CODEVALIDE'])
|| md5($_COOKIE['MONCOOKIE']) !=
md5($_SESSION['CODEVALIDE']))
{
    // redirection vers le formulaire d identification
    header("Location: index.php");
    exit;
}
// ------------------------------------------------------
// si identifie, on continue
?>

avec SESSION

<?php // (avec SESSION)
session_start();
// ------------------------------------------------------
// comparaison avec le code de validation
// si non identifie
if (empty($_SESSION['CODEVALIDE'])
|| md5($_SESSION['MASESSION']) !=
md5($_SESSION['CODEVALIDE']))
{
    // redirection vers le formulaire d identification
    header("Location: index.php");
    exit;
}
// ------------------------------------------------------
// si identifie, on continue
?>

Vos pages à protéger

Code

Ajouter en tout début de chaque page à protéger :

<?php
include("_protectpage.php") ;
// -------------------------------------------------------------------
?>

Insérer un bouton de déconnexion

on insère le formulaire suivant (bouton de déconnexion) dans les pages protégées (ou dans son "menu admin") :

<form method="POST" action="_deconnexion.php">
    <input type="submit" value="deconnexion" name="deconnexion">
</form>

_deconnexion.php

<?php // (avec COOKIE)
session_start();
// ------------------------------------------------------
// on vide/détruit le cookie "perso" et la session
$_SESSION = array();
$session_name = session_name();
setCookie('monCookieNom'); // destruction du cookie
// destruction des informations du cookie en mémoire
unset($_COOKIE['monCookieNom']);
session_destroy();
// Redirection vers le site
header("Location: http://www.MONSITE.com");
exit;
// ------------------------------------------------------
?>

avec SESSION

<?php // (avec SESSION)
session_start();
// ------------------------------------------------------
// on vide/détruit les variables de session
$_SESSION = array();
$session_name = session_name();
session_destroy();
// Redirection vers le site
header("Location: http://www.MONSITE.com");
exit;
// ------------------------------------------------------
?> 

Historique initial :
26 août 2008 14:53:43 : mise en page du tutoriel
26 août 2008 16:14:23 : mise en page (fin ?)
06 septembre 2008 11:18:35 : Ajout d'un code de validation généré aléatoirement. + actualisation du code
06 septembre 2008 11:29:48 : mise en page Word2007
06 septembre 2008 11:42:25 : -
06 septembre 2008 11:45:24 : -
14 mars 2009 09:10:18 : Mise a jour en fonction des commentaires.
14 mars 2009 09:17:56 : Mise a jour en fonction des commentaires.
14 mars 2009 09:24:56 : modification (3eme essai ...)
14 mars 2009 09:27:14 : Malgré plusieurs tentatives, mes MODIFICATIONS DU TUTO ne sont pas prises en compte .... Allez voir sur : http://www.asp-php.net/scripts/asp-php/proteger-page.php
19 mars 2009 20:05:41 : mise a jour
20 mars 2009 17:20:35 : maj

A voir également
Ce document intitulé « Php - administrer en ligne : protection des pages » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous