PHP/Authentifizierung

Aus Mikiwiki
< PHP
Version vom 24. Januar 2009, 22:18 Uhr von Michi (Diskussion | Beiträge) (Die Seite wurde neu angelegt: 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 "aut...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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").