PHP/Authentifizierung
< PHP
Die Authentifizierung wird häufig verwendet. Mit Einsatz einer Datenbank lässt sich das Problem besonders einfach lösen. Benötigt wird die folgende Tabelle "auth" in der Datenbank "php5test". Zusätzlich müssen (z. B. über Phpmyadmin) einige Benutzer eingetragen werden, sonst gibt es nichts zu authentifizieren.
## Name myguestbook.sql
##
CREATE TABLE auth (
id int(11) NOT NULL auto_increment,
name varchar(20) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (id),
KEY name (name)
);
|
Die folgende Form des Authentifizierungsskripts setzt voraus, dass PHP als Modul im Apache HTTP Server läuft, denn nur dann stehen die Werte der Authentifizierung in den verwendeten Variablen.
<?php
function authenticate()
{
## Nutzung der HTTP-Standardauthentifizierung
header("WWW-authenticate: basic realm=\"Photo Album\"");
header("HTTP/1.0 401 Unauthorized");
echo <<<INFO
Sie benötigen einen gültigen Benutzernamen
...
INFO;
exit;
}
##### MAIN PROGRAM #####
## Variable "$PHP_AUTH_USER" ist nur gesetzt, wenn der Webbrowser
## Benutzernamen und Passwort abgefragt und übertragen hat.
if(!isset($_SERVER['PHP_AUTH_USER']))
{
authenticate();
}
else
{
include("open.inc.php");
## Benutzername wird aus der Variablen "$PHP_AUTH_USER" geholt.
$id = strtolower($_SERVER['PHP_AUTH_USER']);
## Öffnen der Tabelle "auth", Passwort wird aus der Variablen
## "$PHP_AUTH_PW" geholt.
$query = mysql_query("SELECT * FROM auth WHERE name=\"$id\"
AND password=\"{$_SERVER['PHP_AUTH_PW']}\"");
## Wurde der Benutzer nicht gefunden, so wird die Abfrage des
## Passworts wiederholt.
if(!mysql_num_rows($query))
{
authenticate();
}
}
?>
|
Für dieses Authentifizierungsskript bieten sich einige Ergänzungen an:
- Begrenzen der Zahl der Aufrufe der Authentifizierungsfunktion, um das fortlaufende Ausprobieren von Passwörtern zu verhindern.
- Verwaltungsfunktion, mit der Benutzernamen und Passwörter in die Datenbank importiert werden.
- Verschlüsselung der Passwörter in der Datenbank mit einer Hashfunktion (z. B. "md5").