Hallo,
Ich arbeite an einem Login-Skript in PHP. Dazu benutze ich für die Nutzererkennung Sessions. Dabei wird der Hash des Nutzernamens in einer Session gespeichert.
Wieso der Hash des Nutzernamens? (Reden wir über einen Hash als Datenstruktur oder über einen kryptographischen Hash?)
In den Session-Daten, das ist eine Datenstruktur auf dem Server, steht üblicherweise die User-ID. So wird der Login-Status umgesetzt. Den Namen nun zu hashen, gar mit ungesalzenem MD5 oder ähnlich, ist unnötig und verbessert die Sicherheit nicht.
Ich habe gehört, dass Sessions gehijacked werden können. Kann dabei auch der gespeicherte Hash des Nutzernamens entwendet werden.
Die Session-Daten befinden sich üblicherweise auf dem Server. Ein direkter Zugriff darauf ist nicht durch Session-Hijacking möglich, sondern höchstens durch einen Einbruch in die Server-Software.
Ein Angreifer kann mit der Session jedoch alles tun, was der eingeloggte User tun kann. Es kann also alles entwendet werden, das dein System dem eingeloggten User herausgibt.
Ich bin mir ziemlich sicher, dass der Nutzername dazugehört, weil der i.d.R. auf der generierten Website steht. Ich bin mir auch sicher, dass der Nutzername zu den Informationen gehört, deren Kompromittierung am wenigsten schmerzhaft ist. Die anderen Informationen und Funktionen, auf die der Angreifer durch das Session-Hijacking Zugriff hat, sind wahrscheinlich das größere Problem.
Außerdem möchte ich keine Cookies verwenden.
Warum nicht?
Was glaubt ihr ist generell die bessere Wahl: Session oder Cookies?
Die Frage ist unlogisch, weil Cookies ein Mittel sind, um Sessions umzusetzen; und Sessions sinnvollerweise mit Cookies gelöst werden. Eine andere sichere und zuverlässige Möglichkeit, Session-Identifier bzw. Session-Daten zu übertragen, gibt es nicht.
Mathias