Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  PHP & HTTP
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet



 

Authentifizierung via HTTP




Es bestht die Möglichkeit, den Browser ein Fenster öffnen zu lassen, in dem Name und Passwort eingetragen werden müssen. Dies jedoch nur dann, wenn PHP als Modul und nicht als CGI läuft.

Die Umsetzung stellt sich recht einfach dar:


<?php
  
if($PHP_AUTH_USER!="Matthias" OR $PHP_AUTH_PW!="Kannen") {
    
Header('HTTP/1.1 401 Unauthorized');
    
Header('WWW-Authenticate: Basic realm="Privatezone"');
    echo
"Sie haben den Vorgang abgebrochen!";
    exit;
  }
?>
<html>
<head>
<title>Privatzone</title>
</head>
<body>
<h1>Hier ist die Privatzone von </h1>
<h2>
<?php
  
echo "Nutzer: ".$PHP_AUTH_USER." Passwort: ".$PHP_AUTH_PW;
?>
</h2>
</body>
</html>



Beim ersten Aufruf sind beide Variablen $PHP_AUTH_USER und $PHP_AUTH_PW nicht gesetzt. Hierdurch wird der Abschnitt der IF-Anweisung bearbeitet. In diesem werden die beiden Header zurückgegeben, die den Browser veranlassen, nach den Nutzernamen und dem Passwort zu fragen. Die Bezeichnung für den Privatenbereich können Sie nach belieben anpassen, sämtliche übrigen Bestandteile des Headers sollten Sie genauso übernehmen. Die echo-Anweisung wird lediglich dann ausgegeben, wenn der Anwender bei der Paßwortabfrage auf Abbrechen klickt oder im Falle des Internet Explorers, drei Versuche, sich zu authentifizieren, mißlungen sind, dann springt der Webserver nach dem echo aus der Datei und der Rest wird nicht mehr ausgegeben. Sollte der Anwender jedoch über das korrekte Passwort mit dem korrekten Nutzernamen eingeben, wird der Bereich innerhalb der IF-Anweisung nicht bearbeitet und der Rest der Datei interpretiert.

Sollten Sie auf Nummer sicher gehen wollen sollten Sie die globalen Servervariablen $_SERVER, wie folgt einbinden:



<?php
  
if($_SERVER["PHP_AUTH_USER"]!="Matthias" OR $_SERVER["PHP_AUTH_PW"]!="Kannen") {
    
Header('HTTP/1.1 401 Unauthorized');
    
Header('WWW-Authenticate: Basic realm="Privatezone"');
    echo
"Sie haben den Vorgang abgebrochen!";
    exit;
  }
?>
<html>
<head>
<title>Privatzone</title>
</head>
<body>
<h1>Hier ist die Privatzone von </h1>
<h2>
<?php
  
echo "Nutzer: ".$_SERVER["PHP_AUTH_USER"]." Passwort: ".$_SERVER["PHP_AUTH_PW"];
?>
</h2>
</body>
</html>



Das PHP-Skript erhält über folgende Servervariablen die Anmeldedaten:

Variable Wert
$_SERVER["PHP_AUTH_USER"] Nutzername
$_SERVER["PHP_AUTH_PW"] Passwort im Klartext
$_SERVER["PHP_AUTH_TYPE"] Authentifizierungstyp


Das Skript kann die Gültigkeit der so übergebenen Daten prüfen. Diese Variablen stehen Ihnen immer nur dann zur Verfügung, wenn das PHP-Skript die Authentifizierung veranlasst hat. Hat sich ein Anwender einmal am System angemeldet, werden die Anmeldungsdaten im Browser gesichert. Bei jedem Aufruf einer Ressource im geschützten Bereich sendet dieser automatisch die Authentifizierungsdaten mit. Der Anwender muss sich somit nur einmal anmelden. Sie sollten jedoch beachten, dass im Authentifizierungsschema Basic das Passwort im Klartext gesendet wird. Es wäre daher ratsam gegebenenfalls HTTPS zu verwenden, um eine sichere Übertragung zu gewährleisten.


Sicherheitsproblem

Es gibt noch ein kleines Sicherheitsproblem das es zu berücksichtigen gilt. Der Browser speichert nämlich den Nutzernamen und das Paßwort, so daß die Autoren derjenigen Seiten, die man nach der Passworteingabe abruft, theoretisch das Passwort abfragen könnten. Dies kann man jedoch ganz einfach verhindern, indem man den Browser komplett beendet oder den PHP-Abschnitt, wie folgt anpasst:



<?php
  
if($PHP_AUTH_USER!="Matthias" OR $PHP_AUTH_PW!="Kannen") {
    
Header('HTTP/1.1 401 Unauthorized');
    
Header('WWW-Authenticate: Basic realm="Privatezone"');
    echo
"Sie haben den Vorgang abgebrochen!";
    exit;
  } else {
   unset(
$PHP_AUTH_PW);
  }
?>




 


Download
 






© 2001-2005 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de