Actualites | Forum |Archives
Le magazine des décideurs et webmasters qui gagnent !
Inscription | Livre d'or | Plan du site | 15 visiteurs actifs
   
A la Une
Actualité
Dossiers
Communiqués
Coin Technique
Agenda des salons
Emploi
Echange de liens

Archives
Sélection
Expérience qui parle
Internet quotidien
Tous les dossiers

Forum
Forum SAM-MAG

Guides
Check-list de la promotion des sites
Promouvoir et référencer les sites web

Contact
Nous contacter
Newsletter
La protection des données personnelles


 
  Contrôler l'accès de pages d'un site web (I)
Dossier "SAM l'Informaticien" du 25 Décembre 2000 au 7 Janvier 2001 par Julie Meloni

ne des évolutions importantes actuelles du web est bien son utilisation comme extranet, c'est à dire de sites ou de partie de sites qui ne peuvent être déployés que pour des utilisateurs authentifiés.

(Traduit de l'article original
www.zend.com/zend/tut/authentication.php)

Généralités

Dans ce tutorial, nous allons apprendre à initialiser l'authentification d'un utilisateur en PHP, et ensuite de valider les utilisateurs en confrontant les valeurs des variables globales $PHP_AUTH_USER et $PHP_AUTH_PW à une liste de codes utilisateurs et mot de passe. Les exemples de codes proposés dans ce guide vont détaillé comment utiliser l'une ou l'autre des méthodes suivantes: valeurs en dur dans le code, un fichier texte, un fichier .htpasswd ou une table de base de données, pour gérer la liste des codes utilisateurs valides et de leur mots de passe associés.

Objectifs d'apprentissage

Nous allons utiliser les techniques suivantes:

  • Envoi d'une entête spécifique pour afficher une boîte de dialogue d'authentification ;
  • Utilisation de l'entête "location" pour rediriger l'utilisateur vers une nouvelle URL.

  • Lecture de valeurs à partir d'un fichier texte ou d'une base de données et comparaison de ces valeurs lues à celles des variables globales $PHP_AUTH_USER et $PHP_AUTH_PW.

Nous allons utiliser les fonctions suivantes:
exit, break, crypt(), header(), fopen(), fread(), filesize(), fclose(), isset(), substr().

Comment çà marche ?

L'authentification basée sur PHP reproduit celle du serveur WEB. Quand on envoie de façon explicite les headers HTTP appropriés à partir du script PHP vers le navigateur, une boîte de dialogue demandant "code utilisateur" et "mot de passe" est affichée. PHP assigne respectivement les valeurs saisies pour le "code utilisateur" et le "mot de passe" dans les variables globales $PHP_AUTH_USER and $PHP_AUTH_PW. Nous pouvons alors utiliser ces variables pour valider la saisie à partir d'une liste de "codes utilisateur/mots de passe" stockée dans un fichier texte, un fichier .htpasswd ou une base de données.

Nous allons suivre les étapes suivantes:

  • Envoi des entêtes HTTP (headers);
  • Interprétation des variables ;
  • Valider un "code utilisateur/mot de passe" en utilisant:
    • des valeurs en dur ;
    • un fichier texte ;
    • le fichier .htpasswd ;
    • et une base de données

Envoi des entêtes HTTP

La fonction PHP header() permet l'envoi de chaînes d'entêtes HTTP spécifiques, comme la redirection ou dans notre cas l'erreur "401": "Unauthorized". Ce type d'entête, combinée avec une entête "WWW-Authenticate", va nous permettre l'activation de la boîte de dialogue d'authentication

Note: Il ne faut rien envoyer au navigateur avant l'utilisation de la fonctionn header() : espaces, lignes blanches, HTML ou '\n', '\r', etc.. L'envoi de caractères avant les entêtes provoque une erreur d'analyse lors de l'exécution du script.

Code source

  • L'utilisation conjointe de ces deux entêtes va provoquer l'affichage de la boîte de dialogue d'authentication.
  • Pour être sûr de ne pas aller plus loin dans le script nous utilisons la fonction exit().

<?php    
header
('WWW-Authenticate: Basic realm="Private"');
header('HTTP/1.0 401 Unauthorized');
exit;
?>

Interprétation des variables

La boîte de dialogue d'authentification provoque la saisie de deux champs, dont les valeurs sont affectées aux variables golbales PHP $PHP_AUTH_USER et $PHP_AUTH_PW. Jusqu'à ce qu'une valeur leur soit assignée $PHP_AUTH_USER et $PHP_AUTH_PW restent vides par défaut (comme toutes les autres varaibles globales de PHP)

Note: L'ordre usuel des événements d'un script d'authentification en PHP est de vérifier en premier qu'aucune valeur n'a été affectée ni à $PHP_AUTH_USER ni à $PHP_AUTH_PW, et ensuite d'agir en conséquence. Cette situation convient bien à l'accès initial d'un utilisateur à la page. Après une autehntification initiale $PHP_AUTH_USER et $PHP_AUTH_PW sont déjà valorisées et ont pour valeur le "code utilisateur" et le "mot de passe" saisis par l'utilisateur.

Nous devons donc ne proposer la boîte de dialogue que si ces variables n'ont pas encore de valeurs. La séquence de code ci-dessous prend en compte cette considération en utilisant la fonction isset().

Code source

  • Utilisation de isset() si les variables $PHP_AUTH_USER et $PHP_AUTH_PW ont ou non des valeurs ;
  • Demander au navigateur d'afficher la boîte de dialogue d'authentification si aucune valeur n'est définie ni pour $PHP_AUTH_USER ni pour $PHP_AUTH_PW ;
  • Utilisation de la fonction "echo" pour envoyer un message adapté àl'utilisateur.

<?php
if ((!isset( $PHP_AUTH_USER )) || (!isset($PHP_AUTH_PW))) {

    
header'WWW-Authenticate: Basic realm="Private"' );
    
header'HTTP/1.0 401 Unauthorized' );
    echo 
'Authorization Required.';
    exit;

} else {

    echo 
"You entered $PHP_AUTH_USER for a username.<BR>";
    echo 
"You entered $PHP_AUTH_PW for a password.<BR>";

}
?>

Valider la saisie par des valeurs en dur

Le code ci-dessus ne permet pas réellemnt l'authentification de l'utilisateur puisqu'il vérifie que les variables ont bien une valeur mais pas qu'elles ont ue valeur spécifique. dans cette étape, nous allons suivre la même séquence de code mais nous allons ajouter un test de valeurs. Dans cet exemple nous allons utiliser des valeurs en dur ; nous afficherons le message "Success!" si les deux valeurs saisies sont correctes ; autrement nous afficherons un message d'échec "Failure!".

Code source

  • Nous utilisons isset() pour vérifier si les variables $PHP_AUTH_USER et $PHP_AUTH_PW ont ou non des valeurs. Dans la même séquence nous vérifions, si les deux ont des valeurs, nous vérifions que ces valeurs sont bien celles attendues.
  • Nous affichons le message de succès si les deux valeurs correspondent aux valeurs en dur.

<?php

if ( ( !isset( $PHP_AUTH_USER )) || (!isset($PHP_AUTH_PW)) 
     || ( 
$PHP_AUTH_USER != 'user' ) || ( $PHP_AUTH_PW != 'open' ) ) {

    
header'WWW-Authenticate: Basic realm="Private"' );
    
header'HTTP/1.0 401 Unauthorized' );
    echo 
'Authorization Required.';
    exit;

} else {

    echo 
'Success!';

}
?>

NB : certains d'entre vous m'ont interpellé quelques fois, me demandant pourquoi les scripts que je donnais ne fonctionnaient pas comme prévu alors qu'ils en faisaient un copier/coller. C'est justement le copier/coller qui pose problème, je mets souvent des blancs insécables à l'intérieur des scripts pour que l'expression reste entière. Les scripts ci-dessus en ont, il fauit donc retarvailler le script sous éditeur avant de le tester.

Lire la 2ème partie >>


Julie Meloni

Tech. Director, i2i Interactive
www.thickbook.com

Traduit par Daniel Lucazeau
@jornet.com
Chef de projet Internet

Tous droits réservés - Reproduction même partielle interdite sans autorisation préalable

 
 
Google
 
Web www.sam-mag.com
 

Copyright © ACORUS 2004. All Rights Reserved

- Sam-Mag.com Referencement-Sur-mesure - Referencer-Site-Web.com
Visibilite-Internationale.com - Referencement-Immobilier.net