Direkt zum Inhalt
Bild von CVB      vLIB-Logo      Drehendes E-Mail-Logo
Navigation oben / Hauptnavigation
Impressum

PHP-Authentifizierung mit der "mod_auth"

  • Diese Seite drucken

Login-Fenster Die "mod_auth" ist ein Modul von Apache, das nur in Verbindung mit PHP funktioniert, wenn PHP als API und nicht als CGI kompiliert wurde. Die "mod_auth" bietet die Möglichkeit des grafischen Logins. Der Vorteil liegt in der vertrauten Oberfläche für den Benutzer und darin, dass der Browser intern das Passwort apspeichert.

Das Gleiche in einer Webmaske zu realisieren, würde höheren Programmieraufwand erfordern. Die "mod_auth" kann keine zusätzliche Variablen verwalten oder sich merken. Sie sollte dann eingesetzt werden, wenn sie auf dem Apache-Webserver zur Verfügung steht und für die Applikation eine reine Authentifizierung ausreicht.

<?php
   include "auth.php";
   echo "<meta http-equiv='refresh' content='0; URL=http://www.ix.de'>";
?>
Ok, dieses Skript verrät noch nicht allzu viel, dafür sollte die "auth.php" Klarheit verschaffen:
<?php
   function auth($area)
   {
      Header("WWW-authenticate: basic realm=$area");
      Header("HTTP/1.0 401 Unauthorized");
      // pure HTML errormsg
      echo <<<errormsg
      |…|
      <h2>Sie benötigen Benutzername und Kennwort für den Zugriff.</h2>
      |…|
errormsg;
      exit;
   }

   $user = $_SERVER['PHP_AUTH_USER'];

   if(!isset($user))
   {
      auth('Top Secret');
   }
   else
   {
      // DATABASE variables
      require_once('db_config.php');
      $connect = mysql_connect(HOST, USER, PASSWORD);
      $result = mysql_db_query(
         $db_name, 
         "SELECT name, city
            FROM vlibTemplate
            WHERE name = '$user' 
            AND city = '$PHP_AUTH_PW'",
         $connect
      );

      if (!mysql_num_rows($result))
      {
         auth('Top Secret');
      }
      else
      {
         $row = mysql_fetch_array($result);
      }
      mysql_close($connect);
   }
?>
Die Funktion nutzt die HTTP-Standardauthentifzierung. Dazu wird dem Browser eine entsprechende Aufforderung gesendet.
header("WWW-authenticate: basic realm=$area");
header("HTTP/1.0 401 Unauthorized");
Im Hauptteil wird die Variable "$_SERVER['PHP_AUTH_USER']" abgefragt (siehe php.net: Vordefinierte Variablen), die nur gesetzt ist, wenn der Browser Benutzernamen und Kennwort abgefragt hat:
$user = $_SERVER['PHP_AUTH_USER'];
$password = $_SERVER['PHP_AUTH_PW'];

$result = mysql_db_query(
   $db_name, 
   "SELECT login_name, password 
      FROM login_table
      WHERE login_name = '$user' 
         AND password = '$password'",
   $connect
);
if (!mysql_num_rows($result))

Die Abfrage sucht nach dem eingegebenen Benutzernamen und dem zugehörigen Passwort in der Datenbank. Wenn kein Ergebnis vorliegt, wird die Abfrage wiederholt. Sollte der User auf "Abbrechen" klicken, wird die Fehlerseite ausgegeben.

Powered by Plone

Diese Seite erfüllt die folgenden Standards:

Valid XHTML   Valid CSS