Benutzeridentifizierung mit PHP für Folgeseiten

M

Maestro74

Mitglied
Thread Starter
Dabei seit
31.03.2003
Beiträge
76
Reaktionspunkte
0
Hallo Leute !

Ich habe für mein kleines Proggi eine Login Eingabe mit PHP programmiert.
Der User wird mit UserName und UserPasswort über eine angebundene mySQL Datenbank identifiziert mit Hinterlegung der SessionID. Hat er sich korrekt identifiziert wird die nächste Seite aufgerufen.

Soweit so gut. Funktioniert auch alles prächtigt. Nun mein Problem.
Wenn der User nun clever ist und er kennt den Namen der FolgePHP Datei, dann kann er diese aufrufen ohne Identifikationsprüfung. Ich möchte dies nun verhindern.

Wie kann ich das anstellen, dass die FolgePHP Datei nicht einzeln aufgerufen werden kann, ohne das der User sich identifiziert hat ? Ich will natürlich nicht, dass der User nach der Login Eingabe für jede nachfolgende Seite auch eine LoginEingabe vornehmen muss.

Bsp:
Er identifiziert sich über die Login Datei. Alles ok und er kann im Programm arbeiten. Er schließt das Browserfenster und öffnet es danach wieder und gibt den Namen der FolgePHP Datei ein. Jetzt müsste das Proggi sagen, "nein ist nicht, erst über das Login identifizieren lassen"!

Ich hoffe, dass ich mich verständlich ausgedrückt habe und vielen Dank für Eure Beiträge !

Herzliche Grüße
 
Zuletzt bearbeitet:
Dafür könntest du die Sitzungen serverseitig verwalten. Beim Aufruf der Folgeseite müssen dann immer Benutzer- und Session-ID angegeben werden. Damit nicht jeder, der die Benutzer- und Session-ID kennt, mit dem Konto des Benutzers Unfug machen kann, solltest du zusätzlich die IP-Adresse protokollieren und prüfen.
 
Maestro74 schrieb:
[...]mit Hinterlegung der SessionID.
Du arbeitest also mit Sessions, dann ist das doch kein Problem. Auf jeder Seite die geschützt sein soll überprüfst Du ob eine Session existiert bzw. ob die Session einen bestimmten Wert enthält, z.B. $_SESSION['valid_user'] auf true überprüfen. Beim Einlogen setzt Du diesen Wert auf true und fertig. :)
 
Huhu,

Du suchst auf php.net nach
- session_start()
- $_SESSION
und allgemein der Session-Verwaltung.

"Documentation" ist dein Freund ;)

Gruß
DeineMudda

P.S. Ups, zu spät :D - Aber in deinem Fall würde ich noch behaupten, dass die IP-Adresse nicht relevant ist.
 
Zuletzt bearbeitet:
Diesen codeblock setzt du am Anfang (wichtig, davor darf kein anderer code stehen) von jeder zu schützenden Seite:

PHP:
<?php
@session_start();
if (!$_SESSION["user_logedin"]){
  header("location: loginmaske.php");
  die;
}
?>

$_SESSION["user_logedin"] setzt du wenn Benutzername und Passwort stimmt auf 1 (oder true oder was auch immer ;-))... wichtig ist auch, dass "@session_start()" auf jeder Seite steht (auch auf den nicht zu schützenden Seiten)
 
Zuletzt bearbeitet:
Du kannst auch den Apache mit entsprechender Authentifizierung (LDAP,DB, Datei) konfigurieren und die ganz normale htacess-Zugriffsbeschränkung nutzen. Somit ist auch ein Gruppenweiser Zugriff auf bestimmte Bereiche implementierbar!
 
dms schrieb:
Du arbeitest also mit Sessions, dann ist das doch kein Problem. Auf jeder Seite die geschützt sein soll überprüfst Du ob eine Session existiert bzw. ob die Session einen bestimmten Wert enthält, z.B. $_SESSION['valid_user'] auf true überprüfen. Beim Einlogen setzt Du diesen Wert auf true und fertig. :)

Ja, dachte ich ja auch. Ich war der Meinung, dass wenn das Browserfenster geschlossen wird und es danach neu geöffnet wird, dass dann bei "session_start()"; ein neue SessionID vergeben wird. Dies konnte ich aber so nicht feststellen. Somit ist die $_SESSION['valid_user'] immer noch mit 'true' gefüllt.

Ich hoffe, ich habe mich verständlich ausgedrückt.
 
Wie oben schon erwähnt wurde, einfach bei jedem Seitenaufruf die Session ID überprüfen. Am besten du überprüfst auch die IP Adresse(wurde auch schon oben genannt), da die sich während einer Sitzung normalerweise nicht ändert.

Was du dir auch noch überlegen musst, ist wie du die Session ID weitergeben möchtest. Es gibt 2 Möglichkeiten:
1. Cookie, das die Session ID enthält
2. du hängst die Session ID immer hinten an den Link

Probleme:
1. Cookies sind nicht bei jedem aktiviert
2. immer die Session ID an einen Link anhängen ist viel Arbeit


PS: Ich habe auch schon einmal so ein Login in Perl/CGI geschrieben. Wollte eigendlich einmal ein Modul draus machen, doch habe im Moment einfach keine Zeit. :)
 
Wenn Cookies deaktiviert sind, fällt PHP doch automatisch auf die URL+SessionID-Methode zurück, oder?
 
Maestro74 schrieb:
Ja, dachte ich ja auch. Ich war der Meinung, dass wenn das Browserfenster geschlossen wird und es danach neu geöffnet wird, dass dann bei "session_start()"; ein neue SessionID vergeben wird. Dies konnte ich aber so nicht feststellen. Somit ist die $_SESSION['valid_user'] immer noch mit 'true' gefüllt.

Ich hoffe, ich habe mich verständlich ausgedrückt.

Wir sprechen hier aber auch wirklich von "Fenster" und nicht von "Tab", ja? Da bin ich mir nämlich sicher dass wenn Du das Fenster schliesst, der Session-Cookie entfernt wird und somit eine wiederaufnahme der Session nicht möglich ist. Das ganze ist natürlich Browserspezifisch, deswegen lege ich dafür nicht meine Hand in's Feuer. Mir ist jedoch kein Browser bekannt der es nicht so macht.
Diese Variante verwende ich bei all meinen Admin-Modulen.

@Jakob
Nur wenn PHP dafür vorbereitet wurde. PHP muss in dem Fall mit --enable-trans-sid kompiliert worden sein und der php.ini-Wert session.use_trans_sid muss auf true stehen.
 
Wir sprechen hier aber auch wirklich von "Fenster" und nicht von "Tab", ja? Da bin ich mir nämlich sicher dass wenn Du das Fenster schliesst, der Session-Cookie entfernt wird und somit eine wiederaufnahme der Session nicht möglich ist.

eben! Da liegt die Crux! IE's auf Windosen sehen zwar aus wie neugestartete Applikationen, sind aber nur Instanzen und somit in der Session! Das ist von der Browserimplementieung abhängig. Meines Wissens kann man einer Session dahe nur einen Rechner ( und nicht einen Browser) zuordnen. Sollte das nicht mehr gelten, lern ich gern dazu!


Gruß wegus
 
wegus schrieb:
Du kannst auch den Apache mit entsprechender Authentifizierung (LDAP,DB, Datei) konfigurieren und die ganz normale htacess-Zugriffsbeschränkung nutzen. Somit ist auch ein Gruppenweiser Zugriff auf bestimmte Bereiche implementierbar!
$

denke auch, dass dies ist der eleganteste weg ist.
 
wegus schrieb:
eben! Da liegt die Crux! IE's auf Windosen sehen zwar aus wie neugestartete Applikationen, sind aber nur Instanzen und somit in der Session! Das ist von der Browserimplementieung abhängig. Meines Wissens kann man einer Session dahe nur einen Rechner ( und nicht einen Browser) zuordnen. Sollte das nicht mehr gelten, lern ich gern dazu!
Gerade beim Win-IE ist mir das Problem nicht bekannt. :) Der hat ja von Haus aus keine Tabs. Vielleicht ist das Verhalten mit irgendwelchen Tab-Mods anders, aber in der Standardversion des 6er-IE's kann ich das nicht bestätigen. Meine Erfahrung ist dass das "Problem" nur bei Tab-fähigen Browsern wie Opera oder Firefox auftritt.
 
Zurück
Oben Unten