Fragen zur Session ID
Hans-Peter
- php
0 Patrick Schröder0 LX0 Hans-Peter0 Tom
Hallo zusammen,
ich versuche gerade einen halbwegs sicheren Login-Bereich zu programmieren.
Ich habe mir gedacht, dass mein Script, sobald Benutzername und Passwort übereinstimmen, die Session ID in die Datenbank schreibt und wenn halt die Session ID in der Datenbank mit der PHP Session ID übereinstimmt, der User eingeloggt ist.
Hierzu meine Fragen:
Ist die Session ID wirklich so eindeutig, dass sie nie wieder an einen anderen User übergeben wird, oder kann es es mit meinem tollen System passieren, dass ein User so in ein fremdes Konto gelangen könnte?
Gruß, Hans-Peter
Hallo Hans-Peter,
eine Session-ID ist nicht 100%ig eindeutig, aber eindeutig genug, dass du sie getrost als 100% ansehen kannst. Nichtsdestotrotz bliebe z.B. die Möglichkeit die Session zu kapern, z.B. per Link-Kopie an jemanden anderes.
Sicherheit bekommst du z.B. weiter in dein Script, indem du die gespeicherte Session-ID nach erfolgreichem Logout löschst. Weiter würde ich dir empfehlen, ebenfalls die IP zum Login-Zeitpunkt mit zu kontrollieren, damit eben der Login-Link nicht verteilt werden kann.
Deine Überprüfungen sollten weiter über Dateien erfolgen, die irgendwo im Serverroot liegen und nicht per http aufrufbar sein!
Was jedoch am allerwichtigsten ist (gerade weil du schreibst "halbwegs sicheren..."
Validiere alle Benutzereingaben, ob es sein kann bzw. darf, damit nicht über eine SQL-Injection eine "bewusst falsche" Eingabe zur Herausgabe aller SQL-Daten führt...
Ansonsten kann ich dir noch angehängten Link empfehlen, wo man einige Einblicke in sichere Programmierung bekommt.
Hoffe einigermaßen weitergeholfen zu haben...
Hallo,
Sicherheit ist eine Illusion - der Trick besteht darin, sie jenen Leuten
glaubhaft zu machen, die ihr wirklich gefährlich werden können.
Bei Session-IDs hilft lediglich eine genügend lange ID, die von einem
ausreichend zufälligen Zufallszahlengenerator erzeugt wurde und die niemals
unverschlüsselt übertragen werden sollte (https).
Darüber hinaus kann man die Session-ID intern an die IP und/oder andere vom
Browser übergebenen Werte zu koppeln; eine entsprechende Validitätskontrolle
verhindert zumindest solche Angriffe, bei denen der Angreifer kein
entsprechendes Spoofing verwendet.
Gruß, LX
Hi Patrick,
ich wollte die Session-ID gar nicht erst an die Links anhängen, sondern direkt die PHP Ausgabe session_id mit der gespeicherten ID in der Datenbank vergleichen.
Gegen SQL-Injection habe ich schon Vorkehrungen getroffen.
Den Link schaue ich mir gleich mal an.
Danke!
Hello,
ich wollte die Session-ID gar nicht erst an die Links anhängen, sondern direkt die PHP Ausgabe session_id mit der gespeicherten ID in der Datenbank vergleichen.
Und was soll Dir das nützen, wenn der Client die Session-ID gar nicht zugeschickt bekommt? Dann kann er sie doch dem Server beim nächsten request auch nicht wieder zurückschicken. Und genau auf diesem Mechanismus basieren doch Sessions.
Eine Session-ID unverschlüsselt zu versenden, ist nicht ungefährlich. Darauf wollte LX Dich hinweisen. Es ist aber im "normalen" Leben immer noch sicherer, als gar kein Schutz.
Ein harzliches Glückauf
Tom vom Berg
Ich muss ehrlich gestehen, dass ich das jetzt nicht ganz verstehe.
Die Session-Id bleibt doch eh bei jedem Scriptaufruf gleich solange die Session besteht. Und dann hole ich anhand der gespeicherten Id aus der Datenbank die benötigten Daten.
Hello,
Ich muss ehrlich gestehen, dass ich das jetzt nicht ganz verstehe.
Die Session-Id bleibt doch eh bei jedem Scriptaufruf gleich solange die Session besteht. Und dann hole ich anhand der gespeicherten Id aus der Datenbank die benötigten Daten.
http://de.wikipedia.org/wiki/Client-Server-Modell
Ein harzliches Glückauf
Tom vom Berg
Hello,
der zweite Link sollte auch noch mit rein...
http://de.wikipedia.org/wiki/Client-Server-Modell
http://de.wikipedia.org/wiki/Sitzung_(Informatik)
Ein harzliches Glückauf
Tom vom Berg