PHP-Authentifizierung mit der "mod_auth"
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.