Gå til innhold

Problemer med PHP_AUTH_USER


Anbefalte innlegg

Jeg har installert apache, php og mysql på en PC som kjører XP hjemme, og holder på å lese boka PHP Essentials.

 

I den boka har jeg kommet til autentisering ved hjelp av $_SERVER

[php_AUTH_USER] og $_SERVER[php_AUTH_PW].

Jeg har lagt inn <Directory>-innstillinger i httpd.conf-fila;
Alias /test/ "d:/web/test/"
<Directory "d:/web/test">
   AuthType Basic
   AuthName "XYZ Company Admin"
   AuthGroupFile "d:\web\groups"
   AuthUserFile "d:\web\users"
   require group admins
</Directory>

 

Jeg har lagt til en user, admin, med passord, abc123, som skal brukes i oppgaven - brukeren ligger oppført i d:\web\users-fila. I groups-fila har jeg laga en gruppe, admins, som inneholder brukeren admin.

 

Når jeg går inn på localhost/test, får jeg opp dialogboksen og må fylle inn brukernavn/passord. Så langt, alt vel.

 

Men når jeg går inn på php-fila som brukes i oppgaven, virker det ikke som den klarer å lese av PHP_AUTH_USER!

<?php
   if (!isset($_SERVER[PHP_AUTH_USER])) {
       header('WWW-authenticate: Basic realm="XYZ Company Admin"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Authorization required.';
       exit;
   } else {
   (resten er uinteressant fordi scriptet stopper der)

Etter å ha skrevet inn korrekt brukernavn og passord (admin/abc123, som nevnt over) tre ganger, stopper den med Authorization required.

 

Noen som kan gi en hjelpende hånd og forklare meg hva jeg gjør feil?

Lenke til kommentar
Videoannonse
Annonse

Kan ikke si jeg ble spesielt klokere av å lese der :(

 

Eneste som jeg fant ut kanskje kunne være et spor, var

As of PHP 4.3.0, in order to prevent someone from writing a script which reveals the password for a page that was authenticated through a traditional external mechanism, the PHP_AUTH variables will not be set if external authentication is enabled for that particular page and safe mode is enabled. Regardless, REMOTE_USER can be used to identify the externally-authenticated user. So, you can use $_SERVER['REMOTE_USER'].

Men safe mode er ikke enablet, iallefall står den som safe-mode=off i php.ini...

 

Jeg prøvde også å bytte ut PHP_AUTH_USER med REMOTE_USER - men med samme resultat. Jeg la også inn '' rundt PHP_AUTH_USER, uten at det hadde noen innvirkning...

Lenke til kommentar

Nuhvel...

<?php
// Check to see if $_SERVER[PHP_AUTH_USER] already contains info
if (!isset($_SERVER['PHP_AUTH_USER'])) {
 // If empty, send header causing dialog box to appear
 header('WWW-authenticate: Basic realm="XYZ Company Admin"');
 header('HTTP/1.0 401 Unauthorized');
 echo 'Authorization required.';
 exit;
} else {
 // If not empty, do something else
 // Try to validate against hard-coded values
 if (($_SERVER['PHP_AUTH_USER'] != "admin") || ($_SERVER['PHP_AUTH_PW'] != "abc123")) {
 	header('WWW-authenticate: Basic realm="XYZ Company Admin"');
 	header('HTTP/1.0 401 Unauthorized');
 	echo 'Authorization required.';
 	exit;
 } else {
 	echo "
 	<!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\">
 	<title>XYZ Company Administration Menu</title>
 	</head>
 	
 	<body>
   <h1>XYZ Company Administration Menu</h1>
   <p>Select an option:</p>
   <ul>
   	<li><a href=\"admin_addrecord.php\">Add a New Product</a>
   	<li><a href=\"admin_modrecord.php\">Modify an Existing Product</a>
   	<li><a href=\"admin_delrecord.php\">Delete an Existing Product</a>
   </ul>
 	</body>
 	</html>
 	";
 }
}
?>

 

Jeg regner med at det første leddet i if-setningen er unødvendig i og med at det bare er én spesifikk bruker med ett spesifikt passord som får tilgang - men i og med at koden stod slik i boka, følger jeg den :dontgetit:

 

Jeg prøvde også å lage en php-fil med koden i eksempel 16-1 fra den linken du tipsa om, men jeg fikk samme resultat på den også!

Lenke til kommentar

Scriptet ditt skal fungere fint, prøv dette:

 

if(!isset($_SERVER['PHP_AUTH_USER'])){

 

header('WWW-authenticate: Basic realm="XYZ Company Admin"');

header('HTTP/1.0 401 Unauthorized');

 

}

 

echo "Brukernavn: ".$_SERVER['PHP_AUTH_USER']."<br>\n";

echo "Passord: ".$_SERVER['PHP_AUTH_PW']."<br>\n";

Lenke til kommentar

Jeg fant ut at jeg ikke hadde installert siste build av verken Apache-serveren eller PHP. Så når jeg installerte build 2.0.49 og PHP build 4.3.6 RC3, fungerte det plutselig :thumbs: Om det skyldes en feilkonfigurering i ett eller annet serverscript (mest sannsynlig :innocent:) eller bugs vet jeg ikke.

 

Grusomt irriterende iallefall!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...