PHP und CGI/fastCGI – Probleme bei HTTP-Authentifizierung beheben (PHP_AUTH_USER, PHP_AUTH_PW fehlt!)
Januar 25th, 2012 von Simon | Geschrieben in Codeschnipsel, Fehlermeldungen, Wissenswertes | Keine Kommentare
Ich habe in den letzten zwei Tagen bei einem Kunden ein Projekt installiert, das auf PHP 5.3 basiert und bisher auf keinem einzigen Server Probleme gemacht hat. Auf dem Server (Strato Managed Server) des Kunden funktionierte jedoch leider der Login in den Adminbereich nicht mehr. Nach kurzer Ursachenforschung stellte sich schnell heraus, dass die beiden Variablen $_SERVER["PHP_AUTH_USER"] und $_SERVER["PHP_AUTH_PW"] überhaupt nicht vorhanden waren.
In der Folge versendete mein Skript nun ständig neue Login-Aufforderungen, die natürlich auch bei korrekter Eingabe als falsch zurückgewiesen wurden. Mein Code zum Erzeugen des Login-Fensters sieht im Übrigen so aus:
$auth = $this->request->getAuthData();
if(isset($auth["user"]) && $auth["user"] == "ADMIN" && $auth["pass"] == "GEHEIM")
{
$this->session->is_admin = true;
}
else
{
$this->response->addHeader("WWW-Authenticate", "Basic realm=\"PROJEKT\"");
$this->response->setStatus("401 Unauthorized");
$this->response->send();
$this->session->is_admin = false;
die("Login verweigert");
}
Es wird solange der WWW-Authenticate: Basic realm=”…” – Header und der Status “401 Unauthorized” gesendet, bis der Besucher die richtigen Benutzerdaten eingegeben hat oder genervt abbricht. Da $auth["user"] und $auth["pass"] nicht vorhanden sind, klapppt der Login nie. Die $auth-Variable ist im Grunde nur der für die Authentifizierung notwendige Teil des $_SERVER-Arrays, der von meinem Framework vorher ausgelesen und validiert wurde, was aber aufgrund des in diesem Artikel beschriebenen Problems nicht geht.
Die Lösung des Problems ist relativ simpel, wenn man mod_rewrite auf dem Server zur Verfügung hat. Ich zeige Euch nun, wie es geht. Den ganzen Artikel lesen »



