francoisch Posté 18 Décembre 2009 Posté 18 Décembre 2009 (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 onRewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]</IfModule>AuthUserFile /homez.110/fctoto/www/ferme/.htpasswdAuthGroupFile /dev/nullAuthName "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é 18 Décembre 2009 par francoisch
jcaron Posté 19 Décembre 2009 Posté 19 Décembre 2009 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.
francoisch Posté 9 Janvier 2010 Auteur Posté 9 Janvier 2010 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/.htpasswdAuthGroupFile /dev/nullAuthName "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
francoisch Posté 12 Janvier 2010 Auteur Posté 12 Janvier 2010 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 onRewriteRule .* - [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
francoisch Posté 14 Janvier 2010 Auteur Posté 14 Janvier 2010 bonjour Ca semble fonctionner maintenant chez moi. Cette info si ça pouvait intéresser quelqu'un. Francois
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant