Forum OVH  

Précédent   Forum OVH > Hébergements mutualisés > Programmation
S'inscrire FAQ Guides Recherche Messages du jour Marquer les forums comme lus

Réponse
 
Outils de la discussion
Vieux 04/10/2004, 18h14   #1
beepee357
Membre
 
Date d'inscription: septembre 2004
Messages: 1
Lightbulb Comment utiliser l'authentification HTTP en PHP chez OVH

Pourquoi avons-nous besoin d'authentification dynamique ?

Par exemple, pour contrôler l'accès à un feed RSS sensible. Supposons que vous auriez un serveur web capable de lister les événements de sa log système, et de diffuser ce genre d'information par un feed RSS, ce qui est probablement un excellent moyen de monitorer un ou plusieurs sites. Encore faut-il vérifier qui accède à ces feeds.

Plusieurs newsreaders (au moins RSS Bandit et FeedReader) supportent l'authentification HTTP, et donc nous nous sommes tournés naturellement vers cette solution

Le principal problème, c'est qu'on aimerait bien ne pas se taper une reconfiguration du .htaccess statique à chaque fois qu'un mot de passe change ou est ajouté. L'idéal, c'est de laisser PHP s'occuper de contrôler les profils utilisateurs dans la base de données MySQL.

D'après la documentation PHP, il suffit juste de regarder deux variables pour retrouver le nom et le mot de passe de l'usager distant.

Malheureusement, ces deux variables sont toujours vides lorsque PHP tourne en mode CGI. Devinez quoi ? C'est justement dans ce mode qu'OVH abrite les sites mutualisés...

Fallait-il changer de fournisseur ou renoncer à nos projets ?

Que nenni ! Nous avons simplement trouvé un autre moyen de retrouver les informations de sécurité dans PHP. En fait, la seule chose dont vous avez vraiment besoin est le module Apache mod_rewrite Apache module, et la possibilité d'ajouter quelques directives au fichier .htaccess.

La solution est de sélectionner une variable Apache qui est effectivement transmise à PHP même en mode CGI, et d'y coller les données d'authentification transmises par le navigateur (ou par le newsreader).

Que faut-il mettre dans .htaccess ?

Jetez un coup d'oeil à la directive ajoutée au fichier .htaccess:

Code:
<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
</IfModule>
Cette directive dit que, si le module mod_rewrite est disponible, L'attribut HTTP Authorization doit être placé dans la variable $_SERVER['REMOTE_USER'].

Que faut-il mettre dans le script PHP ?

L'objectif, c'est de faire un script qui marche partout, que PHP s'exécute comme un module Apache, ou en mode CGI.

Avant d'utiliser $_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PW'], vérifier si ces variables sont vides.

Si oui, essayer de les reconstituer à partir de $_SERVER['REMOTE_USER'].

L'extrait de code qui suit fait exactement cela :

Code PHP:
<?php
// maybe we have caught authentication data in $_SERVER['REMOTE_USER']
if((!$_SERVER['PHP_AUTH_USER'] || !$_SERVER['PHP_AUTH_USER'])
    && 
preg_match('/Basics+(.*)$/i'$_SERVER['REMOTE_USER'], $matches)) {
    list(
$name$password) = explode(':'base64_decode($matches[1]));
    
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
    
$_SERVER['PHP_AUTH_PW']    = strip_tags($password);
}
?>
Plus d'info ?

Un descriptif plus complet de la solution est disponible ici, ainsi que le script PHP complet.
beepee357 est déconnecté   Réponse avec citation
Vieux 26/09/2005, 22h00   #2
RG1651-OVH
Membre
 
Date d'inscription: juillet 2005
Messages: 3
Unhappy PHP_AUTH_USER (hébergement mutualisé)

PHP_AUTH_USER et PHP_AUTH_USER sont encore vide ?

j'ai lu
référence yetanothercommunitysystem

et aussi OVH "PHP_AUTH_USER"

Cette directive dit que, si le module mod_rewrite est disponible, houai et si pas là alors ??


Citation:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
</IfModule>
AuthUserFile /home/toutlere/secret/.htpasswd
AuthGroupFile /dev/null
AuthName "Accès Restreint"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

Code PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<br>

<?php

// maybe we have caught authentication data in $_SERVER['REMOTE_USER'] -- see trick explained above

echo "==>[" $_SERVER['REMOTE_USER'] . "]\n";

if((!isset(
$_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_USER']) )
    && 
preg_match('/Basic\s+(.*)$/i'$_SERVER['REMOTE_USER'], $matches)) {
    list(
$name$password) = explode(':'base64_decode($matches[1]));
    
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
    
$_SERVER['PHP_AUTH_PW']    = strip_tags($password);
}


echo 
"[" $_SERVER['PHP_AUTH_USER'] . "]\n";
echo 
"[" $_SERVER['PHP_AUTH_PW'] . "]\n";


if (!isset(
$_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_USER']))
{
header'WWW-Authenticate: Basic realm="Private"' );
header'HTTP/1.0 401 Unauthorized' );
echo 
'Authorization Required.';
exit;
}
else
 {
echo 
"You entered " $_SERVER['PHP_AUTH_USER'] . " for a username.<BR>";
echo 
"You entered " $_SERVER['PHP_AUTH_PW'] . " for a password.<BR>";
}

?>
</body>
</html>

Merci d'avance.
RG1651-OVH est déconnecté   Réponse avec citation
Vieux 10/10/2005, 16h55   #3
frob
Membre
 
Date d'inscription: octobre 2005
Messages: 5
A condition d'avoir rajouté la directive dans .htaccess,
le simple script suivant semble fonctionner :

<?php
echo "*".$_SERVER['REMOTE_USER']."*";
?>

Contrairement à ce qui a été dit plus haut, la variable $_SERVER['REMOTE_USER'] contient juste le nom de l'utilisateur, sans qu'il y ait besoin de décoder quoi que ce soit.
Par contre, je ne suis pas parvenu à récupérer le mot de passe (sous forme codée ou non)

NB : L'hébergement est un 300gp
frob est déconnecté   Réponse avec citation
Vieux 11/10/2005, 13h17   #4
RG1651-OVH
Membre
 
Date d'inscription: juillet 2005
Messages: 3
Exclamation

Merci frob de ta réponse, nous avons donc le même problème ...

Qui pourrait nous aider ???
RG1651-OVH est déconnecté   Réponse avec citation
Vieux 18/10/2005, 16h09   #5
frob
Membre
 
Date d'inscription: octobre 2005
Messages: 5
Finalement, le plus important n'est-il pas de récupérer le nom d'utilisateur ?
Le mot de passe n'a ici que peu d'intérêt, dans la mesure où l'utilisateur est déjà authentifié (en d'autres termes on est certain qu'il a saisi le mot de passe correspondant à son nom d'utilisateur).
frob est déconnecté   Réponse avec citation
Vieux 18/10/2005, 17h17   #6
RG1651-OVH
Membre
 
Date d'inscription: juillet 2005
Messages: 3
Je voudrais faire une securisation par la sécurité APACHE (htaccess) ET par la base MySQL notamment en limitant l'accès à certaines tables en fonction du profil de l'utilisateur, et ceci sans demander une deuxième fois le User/Password.
RG1651-OVH est déconnecté   Réponse avec citation
Vieux 20/10/2005, 06h45   #7
frob
Membre
 
Date d'inscription: octobre 2005
Messages: 5
Dans ce cas, ton "authentification" MySQL a juste besoin du nom d'utilisateur, puisque celui-ci a déjà été authentifié par Apache (ce qui prouve simplement qu'il a saisi le bon mot de passe).
Mais peut-être ai-je mal compris ce que tu veux réellement faire ?
frob est déconnecté   Réponse avec citation
Vieux 06/02/2009, 18h09   #8
forum-vista
Membre
 
Date d'inscription: juillet 2007
Messages: 163
Re : Comment utiliser l'authentification HTTP en PHP chez OVH

Et comment on déconnecte l'utilisateur ?
__________________
Développez vos Tirage photo ou Tirage photo
forum-vista est déconnecté   Réponse avec citation
Vieux 06/02/2009, 18h20   #9
bosco
Membre
 
Date d'inscription: septembre 2006
Messages: 1 155
Re : Comment utiliser l'authentification HTTP en PHP chez OVH

Apache > fermeture de page normalement
autrement, c'est toi qui le gère.
__________________
Camille / Bosco > "Te domine irl" / "est un connard mais assume".
www.forum-pc.net / www.guilde-nerds.fr / www.scoot-boost.com
Pensez à utiliser les moteurs de recherche avant de poser une question !!
bosco est déconnecté   Réponse avec citation
Réponse

Outils de la discussion

Règles de messages
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is oui
Les smileys sont activés : oui
La balise [IMG] est activée : non
Le code HTML peut être employé : non



Fuseau horaire GMT +2. Il est actuellement 17h09.


© OVH 1999-2010