Hallo nochmal!
So, jetzt bin ich zufrieden ;-)
Mit allen von mir getesteten Varianten funktioniert es jetzt einwandfrei. Ich habe es doch nicht ganz so gelöst wie oben beschreiben, eher etwas einfacher, hier nochmal die Links:
Script: http://tmp.knet-systems.de/auth.php
Source: http://tmp.knet-systems.de/auth_source.php
Was haltet Ihr davon? Haben wir hier einen "Hacker" der es schafft den Schutz zu umgehen (also sich nach einem Logout ohne manuelle Eingabe von Zugangsdaten Zugang zum "login-Bereich" verschaffen kann)? Oder gibt es sogar jemanden hier in der "Elite" der gar mit bloßem Auge einen Fehler oder ein Risiko sehen kann? ;-)
Die Gefahr ist ja, das die Auth-Daten im Cache des Browsers liegen, solange das Fenster bzw. der gesamte Browser geöffnet ist. Bei den meisten Browsern(u.A. IE) kann man den Wert mit einem einfachen 401er Response-Header löschen, bei anderen geht das nicht, da bleibt einem nur der Weg über einen neuen(unique) Realm, dazu kann es dann halt noch keine im Cache gespeicherten Daten geben.
Im Prinzip sollte es ausreichen anhand der Session-Daten zu entscheiden ob der User sich neu einloggen soll oder nicht. Aber da einige Brower wie gesagt auf ein 401 Response nicht so reagieren wie sie IMHO sollten, muss man im Falle eines erneuten Logins im Verlaufe einer Browsersession einen anderen Realm senden. Damit es wenigstens am Anfang immer denselben Realm gibt unterscheide ich noch zwischen einer ganz neuen Session, und einer "relogoin" Session, nur bei letzterer bekommt der User einen unique Realm.
Das Problem mit dem Firebird kann man aber zum Glück doch ausklammern, da er sich ja vor allem mit einem Request in der Session Authentifziert.
Meint Ihr das hätte Potential für einen TuT?
Oder ist das für die "Elite" hier doch eher vergleibar mit einem "Rechtsklick-Verhindern" Beitrag?
Das mit dem Unique-Realm gefällt mir nicht wirklich, ich überlege auch schon mit zusätzlichen Header-Angaben zu arbeiten, z.B. "opaque" scheint mir sehr gut geeignet, mal sehen, und auch mal sehen ob und wie die Clients das unterstützen. Oder hat jemand noch andere Ideen?
Ich verstehe nicht wirklich was es für einen Sinn macht sowas kompexes wie die HTTP-Authentifzierung zu entwickeln, und dann so eine simple Kleinigkeit wie das ausloggen nicht wirklich zu implementieren, denn ein Logout ist ein wichtiges Sicherheitsmerkmal wenn es um Authentifzierung geht. Deswegen wird HTTP-Auth auch so selten eingesetzt(gegenüber HTML-Formularen + Sessions zu Authentifzierung).
Viele Grüße
Andreas
PS: kann das vielleicht mal jemand mit Netscape4 und Opera testen? Den habe ich nämlich gerade nicht hier, Danke!