Un module d'authentification HTTP pour votre site
Par Auteur INTERNE, lundi 14 mai 2001 à 01:38 :: Lu sur le Web :: #631 :: rss
Les fonctions d'authentification HTTP de PHP sont un moyen sûr, simple et efficace de tester la validité d'un mot de passe et d'un login pour accéder à un site ou un script précis.
Je vous propose donc une méthode d'authentification pour votre site.
Principe :
Ces fonctions (disponibles si PHP est exécuté en qualité de module d'Apache et non en CGI) font apparaître lors de leur appel une fenêtre de demande de login et de mot de passe grâce à l'appel de la fonction Header(). Une fois les champs remplis, les variables $PHP_AUTH_USER, $PHP_AUTH_PW sont envoyées à l'URL du script. Si ces variables contiennent respectivement le login et le mot de passe adéquates, le script pourra être exécuté, sinon, nous génèrerons une page d'erreur de type 401.
Ce premier exemple vous donne un aperçu du fonctionnement de cette authentification :
<?php
if( !isset($PHP_AUTH_USER) && !isset($PHP_AUTH_PW) ) {
Header("WWW-Authenticate: Basic realm=\"Authentification PHPindex\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Vous ne pouvez accéder à cette page";
exit;
}
else {
echo "login : ".$PHP_AUTH_USER.".<br>";
echo "mot de passe : ".$PHP_AUTH_PW.".";
}
?>
En premier lieu, lors de la toute première connexion, le contenu du "if" est exécuté et nottament la fonction Header("WWW-Authenticate: Basic realm=\"Authentification PHPindex\"") génèrant une fenètre surgissante avec demande de mot de passe et de login.Une fois remplie et validée, l'URL de la page est rappellée et le "else" est exécuté car $PHP_AUTH_USER et $PHP_AUTH_PW ont été renseignés. Le script affiche alors le login et le mot de passe que vous avez saisi "echo". Si vous cliquez sur annulez, une page d'erreur de type HTTP/1.0 401 apparaît avec la phrase "Vous ne pouvez accéder à cette page".
Vérification du duo mot de passe / login :
Au lieu d'afficher simplement les variables globales $PHP_AUTH_USER et $PHP_AUTH_PW comme c'est le cas, nous allons vérifiez leur correspondance avec des valeurs existantes.
Le premier cas est la vérification d'un mot de passe et d'un login uniques. Supposons qu'ils soient inscrits en dur dans les scripts :
<?php
$user = "user";
$pwd = "pwd";
function auth(){
$realm="Authentification PHPindex";
Header("WWW-Authenticate: Basic realm='".$realm."'");
Header("HTTP/1.0 401 Unauthorized");
echo "Vous ne pouvez accéder à cette page";
exit;
}
if( !isset($PHP_AUTH_USER) && !isset($PHP_AUTH_PW) ) {
auth();
}
else {
if( $PHP_AUTH_USER==$user && $PHP_AUTH_PW==$pwd ) {
echo "Bienvenue sur ce site";
}
else{
auth();
}
}
?>
L'appel de la fenêtre surgissante se fait par l'appel de la fonction auth().Mise en oeuvre sur un site de cette procédure d'authentification :
Le but est que le client puisse être reconnu sur chaque page du site. Pour celà on va réaliser une fonction que l'on appellera à chaque début de script par l'intermédiaire d'un script inclus "auth.inc.php".
Chaque script doit comporter cette entête :
<? /* Réalisation : BIOT Nicolas pour PHPindex Contact : BIOT Nicolas <nicolas@globalis-ms.com> ---------------------------------------------------------- Fichier : script.php Description : Script faisant appel à l'authentification Date création : 14/05/2001 Date de modif : 14/05/2001 */ include "auth.inc.php"; # ---------- # Votre Script # ---------- ?>Voici le fichier auth.inc.php appelé par chacun des scripts :
<?php
/*
Réalisation : BIOT Nicolas pour PHPindex
Contact : BIOT Nicolas <nicolas@globalis-ms.com>
----------------------------------------------------------
Fichier : auth.inc.php
Description : Script d'authentification
Date création : 14/05/2001
Date de modif : 14/05/2001
*/
$user = "user";
$pwd = "pwd";
function auth(){
$realm="Authentification PHPindex";
Header("WWW-Authenticate: Basic realm='".$realm."'");
Header("HTTP/1.0 401 Unauthorized");
echo "Vous ne pouvez accéder à cette page";
// la redirection est impossible
// mais vous pouvez inclure une page html d'erreur
include "erreur401.html";
exit;
}
if( !isset($PHP_AUTH_USER) && !isset($PHP_AUTH_PW) ) {
auth();
}
else {
if( $PHP_AUTH_USER==$user && $PHP_AUTH_PW==$pwd ) {
// la suite du script sera exécutée
}
else{
// rappel de la fonction d'identification
auth();
}
}
?>
Une fois le user et le mot de passe saisis, les variables sont stockées dans le cache du navigateur. Elles ne sont donc demandées qu'une fois mais testées tout de même à chaque clic.Il est clair que ce script peut être amélioré par la vérification des $PHP_AUTH_USER et $PHP_AUTH_PW dans une base de données ce qui permettra une personnalisation du site.







Commentaires
#1 - Le vendredi 10 mars 2006 à 08:00, par Feenix
#2 - Le vendredi 10 mars 2006 à 11:03, par Bm
#3 - Le vendredi 27 avril 2007 à 18:51, par chris7ideal
#4 - Le dimanche 25 janvier 2009 à 10:50, par motus
#5 - Le jeudi 18 février 2010 à 14:38, par Miel de la ruche
#6 - Le samedi 7 janvier 2012 à 16:17, par Clem
Ajouter un commentaire
Vous pouvez soumettre un commentaire en remplissant le formulaire ci-dessous. Toutes les contributions font l'objet d'une étape de modération par notre équipe.
Le code HTML dans le commentaire sera affiché comme du texte, les adresses internet seront converties automatiquement.