borisbaer: Remember-Me-Funktion einrichten (CSRF-Token erstellen)

Beitrag lesen

Hallo!

Ich versuche gerade, das Konzept der Remember-Me-Funktion nachzuvollziehen.

Im Moment ist es so, dass ich beim Login einfach nur die Session-Variable für die UserID speichere:

public function signIn(): void
{
	session_regenerate_id( true );

	$user = parent::read( [ 'username' => $this -> username ], 'obj' );

	$_SESSION['id'] = $user -> id;
	$_SESSION['username'] = $user -> username;

	header( 'Location:' . $_SERVER['HTTP_REFERER'], true, 303 );
}

Wenn ich den Browser schließe, dann bleiben beide Variablen erhalten. Wie ich gelesen habe, ist in der PHP-Config eingestellt, wie lange die Session-Variablen bzw. Cookies „überleben“.

Gerne würde ich es so programmieren, dass im Normalfall die Cookies nach dem Schließen des Browsers gelöscht werden, es sei denn man aktiviert das Häkchen bei „eingeloggt bleiben“.

EDIT: Okay, eine Frage konnte ich mir mittlerweile selbst beantworten. Das Normalverhalten ist das Löschen der SESSID, doch dies wird verhindert, wenn man beim Browser einstellt, die Tabs der letzten Sitzung beim Start wiederherzustellen. Deswegen wurde nichts bei mir gelöscht.

Nun habe ich aber auch gehört, dass es so einfach nicht ist mit dieser Angelegenheit, weil es Cross-Site Request Forgery gibt. Wenn ich bei meinem Firefox-Browser unter Web-Speicher den Reiter Cookies öffne, dann sehe je einen Eintrag für phpMyAdmin, PHPSESSID und pma_lang. Daneben befindet sich ein Wert. Ist das die Gefahrenquelle? Ich muss sagen, ich verstehe das ganze Konzept von CSRF nicht, nur dass man da vorbeugen sollte. Wo wird der CSRF-Token übergeben? Bei Datenbank-Interaktionen? Mir stellen sich da zig Fragen.

Zudem wollte ich noch fragen, ob ein session_unset() beim Sign-off reicht oder ein session_destroy() her sollte.

Grüße
Boris

akzeptierte Antworten