HTTP_AUTH_DIGEST und der IE
Raik
- browser
0 Raik
Hallo!
Ich hab einiges gelesen zu den Problemen mit dem IE, aber meine Erfahrungen widersprechen dem gerade.
das Script:
<?php
$realm = 'Translator';
$benutzer = array('admin' => 'mypass', 'gast' => 'gast');
function authenticate($realm){
header('WWW-Authenticate: Digest realm="'.$realm.'", qop=auth, nonce="'.uniqid().'", opaque="'.md5($realm).'"');
header('HTTP/1.1 401 Unauthorized');
}
if (empty($_SERVER['PHP_AUTH_DIGEST']) )authenticate($realm);
if (!($daten = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) || !isset($benutzer[$daten['username']])){
authenticate($realm);
die('Fehlerhafte Response des Browsers!');
}
$A1 = md5($daten['username'].':'.$realm.':'.$benutzer[$daten['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$daten['uri']);
$gueltige_antwort = md5($A1.':'.$daten['nonce'].':'.$daten['nc'].':'.$daten['cnonce'].':'.$daten['qop'].':'.$A2);
if ($daten['response'] != $gueltige_antwort){
authenticate($realm);
die('Username oder Passwort falsch!');
}
echo 'Sie sind angemeldet als: ' . $daten['username'];
function http_digest_parse($txt) {
$noetige_teile = array('nonce'=>1,'nc'=>1,'cnonce'=>1,'qop'=>1,'username'=>1,'uri'=>1,'response'=>1);
preg_match_all('@(\w+)=([\'"]{0,1})([^\'",]+)@', $txt, $treffer);
$return = array_combine($treffer[1], $treffer[3]);
$return = array_intersect_key($return,$noetige_teile);
return (count($return)==7) ? $return : false;
}
?>
<a href="?test=blah&blub=blö">test</a>
Ich hab mir aus Multiple IE den standalone IE6 installiert.
Mit dem funktioniert das Aufrufen von Links mit Querystring einwandfrei. Dabei schneidet der IE6 den Querystring nicht ab, sondern gibt ihn im Request brav vollständig mit an.
der IE7 (mit IE7Pro Erweiterung) dagegen fordert bei jeden Linkclick, ob mit oder ohne Querystring erneut zur Identifizierung auf.
Die Theorie behauptet eigentlich das Gegenteil. Kann sich darauf jemand einen Reim machen?
freundl. Grüsse aus Berlin, Raik
Hallo!
der IE7 (mit IE7Pro Erweiterung) dagegen fordert bei jeden Linkclick, ob mit oder ohne Querystring erneut zur Identifizierung auf.
Hab mir jetzt mal den PHP_AUTH_DIGEST String bei jeden Request in eine Datei loggen lassen und siehe da, dieses verbugte Stück M$-Software hat bei jeden Folgerequest einen falschen Realm angegeben (den ich vorher testweise mal geändert hatte). Nach Neustart tut er jetzt, wie ihm geheissen. Allerdings nehme ich an, dass das problemfreie Verhalten des IE6 darauf beruht, dass er als standalone-Version Teile des IE7 mitbenutzt.
Vielleicht könnte das ja mal jemand mit einem normal installierten IE6 verifizieren und dann berichten.
freundl. Grüsse aus Berlin, Raik