Ich weiß, ein endloses Thema… aber ich glaube ich habe das Prinzip noch nicht vollständig verstanden.
Letztlich brauche ich ein System, um Redakteuren ein Login bzw. Zugang zum Admin-Menü zu ermöglichen. Deshalb eben Sessions.
Meine erste grundsätzliche Frage: Wieso kann ich beim Login nicht z.B. einfach Benutzername und Passwort überprüfen und dann die IP in der Datenbank speichern? Befindet sich die IP eines Nutzers in der DB, so ist der Nutzer eingeloggt und kann z.B. Artikel schreiben. Beim ausloggen wird die IP gelöscht. Somit wären alle Daten immer beim Server und nicht beim Client… Wo ist hier aus Gründen der Sicherheit der Haken?
Ich habe in vielen Anleitungen im Internet gesehen, dass Benutzername und Passwort in der Session gespeichert werden. Ich halte das für völlig falsch, da das Passwort dadurch ja auswertbar ist.
Ich würde es grundsätzlich so handhaben, dass Passwörter als Hash und AES-verschlüsselt in der DB gespeichert werden. Dieses wird abgeglichen und dann ein Wert z.B. eingeloggt=true in die Session schreiben.
Ist das überhaupt sicher? Ich habe das Gefühl, dass sich jeder einfach sein „eingeloggt=true“ selbst schreiben kann und dann Zugang zu den Bereichen bekommt.
2b) Muss bei einer sensiblen Aktion immer wieder irgendwie der Nutzer legitimiert werden? Wenn ja, wie, da das Passwort wie gesagt nicht in der Session steht
Zugriffsberechtigung: Eigentlich möchte ich verschiedene Berechtigungen setzen, d.h. ein Redaktuer hat den zugriff=1, ein anderer zugriff=2 und somit mehr Rechte. Wenn ich das genauso in die Session schreibe, dann könnte man sich doch viel zu leicht eine höhere Berechtigung setzen, oder?
Was willst du mit der IP? Die kann sich ändern, und dann? Und wer garantiert dir, dass sich der User ausloggt und nicht einfach den Browser schließt?
Ich habe bisher in keiner Anleitung gesehen, dass der Username und das Passwort in der Session gespeichert werden.
Ein User kann nicht einfach ein „eingeloggt=true“ in die Session schreiben. Und woher soll er den genauen Namen kennen?
Es reicht, wenn du in jedem Script prüfst, ob ein bestimmter Wert in der Session vorhanden ist
Und nein, auch die Berechtigungen kann nicht jeder User in der Session manipulieren
Moin,
ich glaube du hast das Prinzip der Sessions nicht verstanden.
Weil z.B. in öffentlichen Netzwerken oder Firmennetz alle die gleiche IP haben, und somit jeder eingeloggt wäre.
Wenn man sich nicht ausloggt, ist der nächste der die IP von Provider bekommt automatisch eingeloggt.
Ich habe in vielen Anleitungen im Internet gesehen, dass Benutzername und Passwort in der Session gespeichert werden. Ich halte das für völlig falsch, da das Passwort dadurch ja auswertbar ist.
Auswertbar? wodurch? Beim Client ist nur die session_id gespeichert, welche für den Client eindeutig ist und nicht der Inhalt der Session.
Die Sessiondaten liegen im session_save_path auf dem Server.
Ich würde es grundsätzlich so handhaben, dass Passwörter als Hash und AES-verschlüsselt in der DB gespeichert werden. Dieses wird abgeglichen und dann ein Wert z.B. eingeloggt=true in die Session schreiben.
Das ist ein guter Ansatz, zusätzlich würde ich noch nen hash z.B. aus Browser und client IP mit in die session schreiben und diese bei jeden Aufruf vergleichen. So ist es für andere clients schwieriger die session zu übernehmen.
Ist das überhaupt sicher? Ich habe das Gefühl, dass sich jeder einfach sein „eingeloggt=true“ selbst schreiben kann und dann Zugang zu den Bereichen bekommt.
Siehe oben…
2b) Muss bei einer sensiblen Aktion immer wieder irgendwie der Nutzer legitimiert werden? Wenn ja, wie, da das Passwort wie gesagt nicht in der Session steht
Klar, du musst immer gucken ob die session_id zum Benutzer passt.
Zugriffsberechtigung: Eigentlich möchte ich verschiedene Berechtigungen setzen, d.h. ein Redaktuer hat den zugriff=1, ein anderer zugriff=2 und somit mehr Rechte. Wenn ich das genauso in die Session schreibe, dann könnte man sich doch viel zu leicht eine höhere Berechtigung setzen, oder?
Siehe oben.
Du kannst im grunde genommen das session managment auch komplett selbst übernehmen und die session daten z.B. in einer Datenbank verwalten.