Aller au contenu

Authentification Http en Php / CGI


Sujets conseillés

Posté (modifié)

Bonjour

Je commence à créer un contrôle d’accès basé sur l’authentification Http en Php.

J’ai trouvé ce code :


if ((!isset( $_SERVER['PHP_AUTH_USER'] )) || (!isset($_SERVER['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>";}

qui ne fonctionne pas.

En creusant un peu, j’ai trouvé que :

• Les 2 variables $_SERVER n’existent pas (header('content-type: text/plain'); print_r( $_SERVER );)

• Que mon hébergeur tourne Php en mode CGI, ce qui expliquerait le point ci-dessus

• Une description de ce qu’il faudrait mettre en œuvre dans ce cas dans http://forum.ovh.com/showthread.php?t=3275

J’ai donc :

• Créé sur ma racine un .Htaccess en y mettant juste ça :


<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
</IfModule>
AuthUserFile /homez.110/fctoto/www/ferme/.htpasswd
AuthGroupFile /dev/null
AuthName "Accès au site de test IsiPC"
AuthType Basic
<Limit GET POST>
require user toto
</Limit>

• Ajouté devant mon Php précédent ce code


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);
}

Ca ne fonctionne toujours pas: le script me propose l'identifiant, toto, mais ne prend pas le mot de passe, le message Authorization required sort.

Par contre le Htaccess est correct car je m'en sers de manière classique.

Merci par avance de votre aide.

Francois

Modifié par francoisch
Posté

C'est quoi le but ultime? Faire l'authentification au niveau php en utilisant une BDD, ou juste récupérer l'utilisateur déjà authentifié par les directives dans le .htaccess?

- dans le deuxième cas, il te suffit de consulter $_SERVER['REMOTE_USER'] et l'histoire s'arrête là

- sinon, demande-toi bien si tu ne peux pas le faire dans le .htaccess. Avec un bon mod_auth_mysql ça devrait être réglé en quelques lignes

- si tu veux vraiment faire l'auth en php et utilisé le code fourni, note qu'il manque un \, je te laisse trouver où :-)

Jacques.

  • 3 semaines plus tard...
Posté

bonjour et merci de ta réponse.

En revoyant ma copie, voici ce que jessaie de faire :

Proposer à mes utilisateurs, que je connais tous, deux modes de contrôle daccès suivant leurs capacités : par la boite de contrôle classique sils le peuvent, par une variable attachée à chacun à défaut (personnes âgées / handicapées)

Lintérêt pour moi de gérer tous les accès est de pouvoir placer en tête de chacune de mes pages un contrôle et nen permettre laccès quà ceux qui y sont autorisés, mes visiteurs connus (no hacking)

Donc :

La page daccueil contrôle laccès

Chaque page vérifie ensuite que le visiteur est autorisé

Dans la page daccueil :

Je vérifie si le visiteur doit être contrôlé en mode « facilité », si donc sa variable est positionnée

A défaut, il doit passer par la mire classique de contrôle daccès

Cest sur cette dernière étape que je coince ; comment faut-il sy prendre ?

Ce que jai comme code pour afficher la mire de contrôle daccès :


header('WWW-Authenticate: Basic realm="Connexion au site truc"');
header('HTTP/1.0 401 Unauthorized');

Un fichier Htaccess pour un dossier protégé par un contrôle d'accès classique:


AuthUserFile /homez.110/fctest/tructruc/ferme/.htpasswd
AuthGroupFile /dev/null
AuthName "Accès à truc"
AuthType Basic
<Limit GET POST>
require user toto
</Limit>

Les visiteurs qui passent par la mire de contrôle sont enregistrés, id et mdp, dans un fichier Htpasswd central.

De toute évidence, il me manque plusieurs pièces pour faire fonctionner lensemble.

Après laffichage de la mire :

Je récupère quelles variables ? en mode Cgi, seulement $_SERVER['REMOTE_USER'] ?

Comment contrôler la saisie faite par le visiteur avec ce qui est enregistré dans le Htpasswd ? avec du code Php ?

Le fichier Htaccess ci-dessus est-il utile ?

Par avance merci de votre aide, avec mes excuses si je pose des questions de base.

Francois

Posté

bonjour

J'en sais un peu plus à mesure que j'avance; du moins, j'en ai l'impression.

J'ai compris que:

- l'ordre header('WWW-Authenticate: Basic realm="Connexion au site a0p"') provoque d'abord l'affichage de la boite d'identification puis recharge la page avec les paramètres saisis dans l'Url

- les valeurs saisies peuvent être récupérées, en mode CGI, avec la variable $_SERVER['REMOTE_USER'] qui ne retourne, je crois, que l'identifiant

J'ai cryu comprendre que le fichier Htaccess contenant:


<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
</IfModule>

doit être placé dans la racine du site.

Mais tout ça ne fonctionne pas encore chez moi.

Si vous avez une idée qui pourrait m'aider, par avance merci.

Francois

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...