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