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.

