Passwortschutz mit Sessions
Innuendo
- php
Hallo & guten Abend,
ich möchte nur einen kleinen Passwortschutz machen, komme aber nicht weiter.
Ich gebe in ein Formular Username&Passwort ein und checke es, ob diese korrekt sind.
Wenn ja, wird eine Session gesetzt und an eine andere Seite weitergeleitet. Auf all diesen Seiten, die passwort geschützt sind, möchte ich abfragen ob es die session gibt, wenn ja, passt es, wenn nein, zurück zum Formular.
Ich habe bisher:
if((isset($_POST['username'])) && (isset($_POST['passwort']))) {
$username = $_POST['username'];
$passwort = $_POST['passwort'];
if($username == '1' && $passwort == '1') {
@session_start();
$_SESSION['username'] = $username;
$_SESSION['passwort'] = $passwort;
if(isset($_SESSION['username'])) {
echo "<script language='javascript'>location.href='overview.php?'</script>";}
}
}
Wie kann ich jetzt in der Datei "OVERVIEW.PHP" checken ob es die Session gibt, bzw. mach ich was falsch beim Session setzen?
liebe Grüße,
euer
Innuendo
Hallo,
es gibt nur zwei(-einhalb) Arten, eine Authentifizierung mit HTTP zu errreichen. Entweder über Auth mit error 401 oder über session _mit_ Cookie. Sessions ohne Cookies sind untauglich (Historie).
Wie hast Du das Passwort denn erfragt?
Nach einem erfolgreichen Pasaswortcheck musst Du die einen Vermerk _in_ der Session-datei machen, indem Du z.B. einfach $HTTP_SESSION_VARS["passwort"]=$HTTP_POST_VARS["passwort"] setzt und das gleiche mit Username und seiner ID, falls Du eine Datenbank benutzt.
Dann musst Du auf _jeder_ Seite als erstes eine Session starten und reingucken, ob diese Werte eingetragen sind. Du fragst eben einfach $HTTP_SESSION_VARS["passwort"] und wenn du ihn brauchst auch den Usernamen oder die ID wieder ab.
Außerdem sollte jede Session einen zweiten Cookie (Lifetime=0, nur solange das Window und seine Kinder leben) haben, der ebenfalls in der Sessiondatei eingetragen wird. Damit kann man Mehrfachanwendungen vermeiden.
Noch ein Hinweis:
Wenn Regsister_Globals = OFF ist, dann benutze nicht mehr die Funktionen sesseion_register() und session_unregsiter(). Die sind dann quasi "verboten". Mache alles über Direktzuweisungen auf $HTTP_SESSION_VARS[].
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi Tom,
es gibt nur zwei(-einhalb) Arten, eine Authentifizierung mit HTTP zu errreichen. Entweder über Auth mit error 401 oder über session _mit_ Cookie. Sessions ohne Cookies sind untauglich (Historie).
wieso sind Sessions ohne Cookie Passwortschutzuntauglich? Man kann doch z.B. checken, ob Username + Passwort korrekt sind, wenn ja, die Session_id in ne Db schreiben und bei jedem Aufruf irgendeiner Seite abfragen, ob sich die Session_id in der DB befindet... dann nochn Timeout setzen, und jedesmal, wenn man was macht, wird dieser neu bestimmt. Ist bei dieser Methode etwa eine Sicherheitsluecke?
MFG
Philipp
Hallo,
es gibt nur zwei(-einhalb) Arten, eine Authentifizierung mit HTTP zu errreichen. Entweder über Auth mit error 401 oder über session _mit_ Cookie. Sessions ohne Cookies sind untauglich (Historie).
wieso sind Sessions ohne Cookie Passwortschutzuntauglich? Man kann doch z.B. checken, ob Username + Passwort korrekt sind, wenn ja, die Session_id in ne Db schreiben und bei jedem Aufruf irgendeiner Seite abfragen, ob sich die Session_id in der DB befindet...
Woher kommt denn die Session-ID beim Aufruf irgendeiner Seite (der Session-Domain), wenn dich die z.B. aus den Favoriten abrufe?
dann nochn Timeout setzen, und jedesmal, wenn man was macht, wird dieser neu bestimmt. Ist bei dieser Methode etwa eine Sicherheitsluecke?
Ich sprach von Authentifizierung, nicht von Passwortschutz. Das beinhaltet zwar irgendwo eine Userauthentifizierung mit Passwort- oder Pineingabe, aber natürlich nur einmal pro (Session aus Usersicht). <-- Klammern als mathematische Klammerung...
Sessions sind ohne Cookie nicht tauglich, da zum Beispiel beim Blättern durch Seiten aus dem Cache mit dem Vor- oder Zurückbutton (auch wenn die Seiten neu geladen werden) jedes Mal eine neue Session gestartet wird. Die ist dann nicht Authentifiziert. Beim Surfen durch Seiten einer Domain mit Session über Link (GET) oder Button (POST) kann man das abfangen durch entsprechendes Einfügen der Session-ID in jedem Formular und in jeder URI eines Links. Das macht PHP freundlicherweise alleine. An die URL der bereits vor der Autehntifizierung aufgerufenen Seiten kann es ja keine SESSID mehr anhängen. Folglich ergibt sich die "Bauernregel": Sessions nur mit Cookie (zumindest temporärer), sonst Auth mit "Errordialog 401".
[Wir schreiben da jetzt seit zwei Wochen an "unserer" Doku über Sessions und Authentifizierung, und es gab hier einige Leute, die ganz laut protestiert haben, als ich von einer Seitenzahl von 150 sprach, um alles verständlich darzustellen. Allerdings wurde die Luft bezüglich qualifizierter Antworten auch schon ziemlich dünn (nur ein Beispiel [pref:t=29648&m=160359] ). Die waren der Meinung, auf 10 Seiten wäre alles gesagt. Nun denn...]
Liebe Grüße aus http://www.braunschweig.de
Tom