Www-authenticate avec php en mode cgi

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 309 fois - Téléchargée 29 fois

Contenu du snippet

Si vous utilisez l'instruction Header("WWW-Authenticate: . . . pour authentifier les utilisateurs sur votre site, cela ne fonctionne que si PHP tourne comme module d' Apache.
Le user et le mot de passe sont retournées dans les variables PHP_AUTH_USER.et $PHP_AUTH_PW.

Cette configuration de PHP est cependant cause d'instabilités du serveur et de nombreux hébergeurs propose des solutions avec PHP s'exécutant en CGI.

Lors de l'exécution en mode CGI, PHP ne sait pas récupérer les informations d'authentification d'Apache et les deux variables restent non affectée.

Voici donc un moyen détourné de récupérer cette information.

Placez dans la racine de votre site un fichier .htaccess avec le code suivant (ou ajoutez le au fichier existant )

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^Basic.*
RewriteRule (.*) $1?Authorization=%{HTTP:Authorization} [QSA,L]

Le script d'authentification
Le code suivant est à placé en début de vos pages à protéger
(Ce script utilise la fonction header --> rien ne peut etre affiché avant)

Source / Exemple :


<?
if (preg_match('/Basics+(.*)$/i', $_GET['Authorization'], $Authorization))
{
list($Auth_Name, $Auth_Pwrd) = explode(':', base64_decode($Authorization[1]));

if (($Auth_Name!="MonUser") || ($Auth_Pwrd!="MonPass"))  // Faire ici votre test
{
  Header("WWW-Authenticate: Basic realm=\"My Realm\"");
	Header("HTTP/1.0 401 Unauthorized");
	die("Access refusé");
       }
}
else
{
Header("WWW-Authenticate: Basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
die("Access refusé");
}

...
Le restant de votre page
...
?>

Conclusion :


Une variante pour empêcher l'appel direct de la page avec le paramètre d'authentification est d'utiliser dans le .htaccess

RewriteRule (.*) $1?%{ENV:UNIQUE_ID}=%{HTTP:Authorization} [QSA,L]

Et dans le script
preg_match('/Basics+(.*)$/i', $_GET[$_ENV['UNIQUE_ID']], $Authorization))

De cette façon, vous utilisez une variable de nom aléatoire généré à partir d' UNIQUE_ID pour invalider l'authentification au cas ou quelqu'un arriverait à copier l'URL

Notez que vous pouvez toujours accéder a une page sécurisée de la façon suivante http://User:Password@www.site.com/page.php
Ceci est une régle générale pour tout les serveurs web !

JH

A voir également

Ajouter un commentaire

Commentaires

cs_janhsh
Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
24 janvier 2015

Bonjour,

Ce message est affiché avec la configuration par défaut d' IE lors d'une authentification sur protocole http pour avertir que les données entrées peuvent être capturées.

Deux solution sont possible:
--> aller dans la config d' IE et désactivez ce message
--> utiliser le protocole https pour chiffrer la communication

@+
JH
gfont
Messages postés
1
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
22 mars 2007

Bonjour,
J'utilise ce script d'authentification mais avec IE7, le message qui correspond à realm="Taper votre nom d\'utilisateur (adresse mél utilisée pour vous inscrire) et votre mot de passe (celui que vous avez reçu)" s'affiche dans la fenêtre d'authentification de la façon suivante :

Le serveur www.se-unsa.org à l'adresse Taper votre nom d'utilisateur (adresse mél utilisée pour vous inscrire) et votre mot de passe (celui que vous avez reçu) requiert un nom d'utilisateur et un mot de passe.

Avertissement : ce serveur requiert que votre nom d'utilisateur et votre mot de passe soient envoyés de façon non sécurisée (authentification de base sans connexion sécurisée).

Y-a-t'il un moyen d'éviter ces infos parasites.

Merci d'avance
cs_janhsh
Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
24 janvier 2015

Pour répondre à coucou747

Beaucoups d'hébergeur utilise pour des raisons de stabilité le mode CGI et pour des raisons de sécurité, certains
désactive le mod setenvif et utilise le mod suexec qui réinitialiser les variables d'environnement.

Du coup les règles du style
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
dans le .htaccess ne fonctionne pas.
Je ne vois donc pas comment on peut quand même transmettre les variables d'environnements. Mais si quelqu'un a une autre solution, je suis preneur ?
Shibo_Sources
Messages postés
19
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
3 août 2008

Rien à faire, sa veux pas marcher :(
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
je sais ça, mais avec un .htacces, on peut les transmetre quand même...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.