Geistiger Hohlraum: session.referer_check

Beitrag lesen

bedeutet dann schon die Existenz einer Session in jedem Fall einen angemeldeten Benutzer,

Die Existenz einer Session darf kein Kriterium für einen angemeldeten Besucher sein. Das wäre im höchsten Maße gefährlich, weil man sich Sessions jederzeit selbst starten kann.

Richtig, ich habe einen Teil vergessen zu erwähnen: Ich bin davon ausgegangen, dass auf die Sessiondaten im Skript zugegriffen wird. Eine Session-ID lässt sich von außerhalb erfinden/fälschen, aber nicht die Daten, die zur Session gehören, denn die bleiben auf dem Server.
Die einfache Abfrage, ob eine Session-ID übergeben wurde, ist natürlich zwecklos, da hast Du vollkommen recht. Es muss zwingend ein Wert der Session genutzt werden, z.B. $_SESSION["user"]. Sowas kann nicht von außen injiziert werden, deshalb reicht alleine die Existenz als Ist-angemeldet-Kennzeichen.

Kleiner Seitenhieb am Rande: Wie man Sessions und Userzugangsberechtigungen nicht prüfen sollte, hat die Telekom ja gerade mit ihrem OBSOC gezeigt.

Das war ein anders gelagerter Fall. Man musste sich schon erst anmelden, davon, dass man alleine mit einer erfundenen Session-ID Zugriff hatte, wurde nicht berichtet. Das oder besser ein Problem war also vielmehr eine unzulängliche Berechtigungsverwaltung: alle Kunden hatten gewissermaßen die gleiche Identität und deshalb Zugriff auf alle Kundenverträge (ich meine Nutzung der Vertragsdaten mit "Kundenlevel"). Dass dort tatsächlich Sessiondaten überprüft wurden, zeigt sich daran, dass man mit erlangtem Kundenzugriff zwar alle Kundenverträge, aber nicht interne Verwaltungsdaten zu sehen bekam. Dieser Schritt lief dann über die selten dämlichen Passwörter.

Es hilft der Realisierung, wenn man jedem Besucher der Site standardmäßig eine Session verpaßt.

Fraglich. Ob ich session_start() am Anfang der Loginseite stehen habe oder zwei Zeilen tiefer innerhalb des if, mit dem die Gültigkeit von Name/Passwort überprüft wurde, ist doch irrelevant.

Ob der Besucher als eingeloggt zu betrachten ist, muß in den Session-Daten drinstehen.

Steht beispielsweise ein Benutzername drin, ist er eingeloggt. Hat man keine weiteren Hierachien in der Zugangsberechtigung, reicht die bloße Prüfung, siehe oben. Gibt es weitere Hierachien, muss natürlich die für den Benutzernamen angegebene erst festgestellt werden, aber auch diese dürfte sich im Anschluss in den Sessiondaten halten lassen.

Ein $_SESSION["eingeloggt"] ist demnach überflüssig und, nur nebenbei, ganz und gar nicht sollte man das Passwort in der Session speichern.