Manuel PHP <<< |
Identification HTTP avec PHP | Cookies >>> |
5 Caractéristiques Manuel PHP ->Identification HTTP avec PHP . Cookies . Gestion des chargements de fichier . Utilisation des fichiers à distance . Gestion des connexions . Connexions persistantes aux bases de données . Safe mode . Utiliser PHP en ligne de commande |
5.1 Identification HTTP avec PHP
Les fonctions d'identification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI. Sous cette forme, il est possible d'utiliser la fonction header pour demander une identification ( "Authentication Required" ) au client, générant ainsi l'apparition d'une fenêtre de demande d'utilisateur et de mot de passe. Une fois que les champs ont été remplis, l'URL sera de nouveau appelée, avec les variables PHP_AUTH_USER , PHP_AUTH_PW et AUTH_TYPE contenant respectivement le nom d'utilisateur, le mot de passe et le type d'identification. Ces variables prédéfinies sont trouvées dans les tableaux $_SERVER et $HTTP_SERVER_VARS . Les méthodes d'identification simple ("Basic") et de type "Digest" (depuis PHP 5.1.0) sont supportées. Reportez-vous à la fonction header pour plus d'informations.
Voici un exemple de script qui force l'identification du client pour accéder à une page :
Au lieu d'afficher simplement les variables globales PHP_AUTH_USER et PHP_AUTH_PW , vous préférerez sûrement vérifier la validité du nom d'utilisateur et du mot de passe. Par exemple, en envoyant ces informations à une base de données, ou en recherchant dans un fichier dbm. Méfiez-vous des navigateurs bogués, tels que Internet Explorer. Ils semblent très susceptibles concernant l'ordre des en-têtes. Envoyer l'en-tête d'identification ( WWW-Authenticate ) avant le code de HTTP/1.0 401 semble lui convenir jusqu'à présent. Pour éviter que quelqu'un écrive un script qui révèle les mots de passe d'une page, à la quelle on a accédé par une identification traditionnelle, les variables globales PHP_AUTH ne seront pas assignées si l'identification externe a été activée pour cette page. Dans ce cas, la variable REMOTE_USER peut être utilisée pour identifier l'utilisateur à l'extérieur. De même que $_SERVER['REMOTE_USER'] .
Notez cependant que les manipulations ci-dessus n'empêchent pas quiconque possède une page non identifiée de voler les mots de passe des pages protégées, sur le même serveur. Netscape et Internet Explorer effaceront le cache d'identification client s'ils reçoivent une réponse 401. Cela permet de déconnecter un utilisateur, pour le forcer à saisir à nouveau son nom de compte et son mot de passe. Certains programmeurs l'utilisent pour donner un délai d'expiration, ou alors, fournissent un bouton de déconnexion.
Ce comportement n'est pas nécessaire par le standard d'identification HTTP Basic . Les tests avec Lynx ont montré qu'il n'affectait pas les informations de session lors de la réception d'un message de type 401. Ce qui fait que presser la touche "retour" ( back ) à un client Lynx précédemment identifié donnera l'accès direct à la ressource. Cependant, l'utilisateur peut utiliser la touche '_' pour détruire les anciennes identifications. Notez également que avant PHP 4.3.3, l'identification HTTP ne fonctionne pas sous le serveur Mircosoft IIS avec la version CGI de PHP dû à une limitation de IIS. Pour que cela fonctionne en PHP 4.3.3+, vous devez éditer votre configuration de IIS " Directory Security ". Cliquez sur " Edit " et activez uniquement " Anonymous Access ", tous les autres champs doivent être laissés non actifs. Une autre limitation si vous utilisez le module IIS (ISAPI) et PHP 4, vous ne devez pas utiliser les variables PHP_AUTH_* mais à la place, la variable HTTP_AUTHORIZATION est disponible. Par exemple, utilisez le code suivant : list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
|
<< | Identification HTTP avec PHP | >> |
Manuel PHP | Caractéristiques | Cookies |