Moin!
Funktioniert auch.... fast nur noch ein manko wobei ich net weiß obs eins ist. Beim ersten Login steht in der titelzeile die SessionID, wenn ich nun diese titelzeile kopiere neues Browserfenster aufmache und einfüge, kommm ich auch auf die seite... kann ich das irgendwie verhindern? Komischer weise logge ich mich neu ein... steht sie da nicht mehr...<- bitte nicht schreien ANFÄNGER!!
Zuerst mal grundsätzlich was zum Thema "Einloggen": Man kann sich im HTTP-Protokoll nicht "einloggen", wie es bei FTP, Telnet oder SSH möglich ist, weil ein Einloggen eine dauerhaft bestehende Verbindung voraussetzen würde - und das Beenden dieser Verbindung (aus welchen Gründen auch immer) ein Logout bedeutet.
Da HTTP aber für jede Anforderung einer Ressource eine neue Verbindung aufbaut, ist es zwingend erforderlich, dass bei zugriffsgeschützten Ressourcen der Browser jedesmal Authentifizierungsdaten mitschickt.
Das kann entweder eine Session-ID sein, die zuvor schon mit Username und einem Passwort verbunden wurde, oder Username und Passwort direkt (wie bei der HTTP-Authentifizierung, bekannt als ".htaccess" - obwohl diese Bezeichnung sachlich inkorrekt ist).
Benutzt man Sessions, muß man jeglichen Zugriff auf die Ressourcen selbst prüfen - benutzt man HTTP-Authentifizierung, übernimmt das der Webserver für einen.
Jetzt zu den Session-IDs und deren Übermittlung: PHP sieht dafür zwei grundsätzliche Metoden vor: Primär wird ein Cookie benutzt - und wenn das nicht geht, wird die Session-ID als Parameter an die URL angehängt bzw. als Hidden-Feld in jedes Formular integriert.
Beim allerersten Seitenaufruf einer Seite, die session_start() benutzt, weiß PHP aber noch nicht, ob Cookies zurückgesendet werden - das kann man erst beim ZWEITEN Seitenaufruf feststellen, weil erst dann das erfolgreich gesetzte Cookie zum ersten Mal vom Browser zurückgesendet wird. Wenn PHP aber kein Cookie empfängt (beim ersten Seitenaufruf, oder auch bei jedem folgenden ohne Cookie), wird bei entsprechender Konfiguration immer automatisch an jede URL die Session-ID angehängt und in Formulare integriert, damit die Session-ID auch bei Besuchern, die Cookies ablehnen, nicht verloren geht.
Wenn du die Session-ID kopierst und in einem zweiten Fenster aufrufst, kannst du logischerweise zugreifen, weil du dich vorher mit dieser Session-ID eingeloggt hast. Bei allen deinen Methoden zur Zugriffskontrolle darfst du niemals davon ausgehen, dass alleine die reine Existenz einer Session-ID schon irgendetwas aussagt. Session-IDs kann man sich beliebig selbst generieren, und PHP arbeitet auch mit vom üblichen Schema abweichenden IDs problemlos. "PHPSESSID=hallo" funktioniert.
Sessions sind deshalb recht sicher gegen Übernahme, weil der Zahlenbereich (jede Session-ID ist normalerweise eine 128-Bit-Zahl in Hex-Darstellung) so riesig ist, dass man nicht erfolgreich in annehmbarer Zeit alle IDs ausprobieren kann - aber im Prinzip reicht es aus, genau DEINE aktuelle Session-ID anzugeben, sobald du dich eingeloggt hast, und man hätte Zugriff auf deinen internen Bereich.
Das ist aber auch der Fall, wenn man statt deiner aktuell verwendeten Session-ID (die schwierig zu raten ist) dein Passwort und Username angibt (was hoffentlich auch schwer zu raten ist). Wobei es dann vollkommen egal ist, ob du Username und Passwort über ein Formular sendest, oder HTTP-Authentifizierung benutzt - vom Sicherheitslevel her werden beide Informationen unverschlüsselt übertragen und sind deshalb für Hochsicherheitsanwendungen nicht geeignet - man müßte SSL benutzen, um mehr Sicherheit zu erreichen.
- Sven Rautenberg
My sssignature, my preciousssss!