Sichere session mit Timestamp in MySQL Datenbank

Hallo,

ich programmiere gerade einen Login Bereich in PHP und MySQL. Meinen Login habe ich bisher geschützt, indem ich Loginversuche in einer SQL Tabelle protokolliere und nach drei fehlgeschlagenen Loginversuchen den benutzer für eine stunde sperre.
Nun wollte ich fragen, ob die session ausreichend geschützt ist, wenn ich in der session den benutzername hinterlege und beim erfolgreichen einloggen in der MySQL Datenbank ein Timestamp hinterlegt wird. Jedes mal, wenn der Beuscher eine geschütze Seite aufruft, wird geprüft, ob er schon über eine stunde eingeloggt ist und wenn ja, wird er ausgeloggt.

Wäre über euren Rat sehr dankbar.

Gruß

andostini

Edit: Ich weiß das geht über Cookies viel einfacher, aber ich dachte dass das vielleicht sicherer ist.

Wozu willst du den Timestamp in der Datenbank hinterlegen – wenn du doch eine Session hast?

Ich nahm normalerweise nur das:

session_name("sid");
session_set_cookie_params(1800);
session_cache_expire(1800);
session_start();

//Secure Session - Always use generated ID and store IP
if(empty($_SESSION['addr']) || $_SESSION['addr'] != $_SERVER['REMOTE_ADDR']) {
    session_unset();
    session_regenerate_id();
    $_SESSION['addr'] = $_SERVER['REMOTE_ADDR'];
}

Sollte gegen die meisten Angriffe reichen

Danke für deinen Script. Das sieht nützlich aus :slight_smile:

kommt darauf an welche daten er verwenden möchte in einen Admin Panel, man sollte nicht belanglos viele Werte in Sessions speichern…

Die ursprüngliche Frage zielte darauf, einen Timestamp zu hinterlegen um zu überprüfen ob der Benuzter schon zu lange inaktiv war – den Wert braucht man also nicht in irgendeinem Admin-Panel, den braucht man in erster Linie in der Session selber, um den Benutzer dann bei Bedarf auffordern zu können, sich erneut zu authentifizieren.

(Die komplette Session kann natürlich in der Datenbank liegen, wenn man nicht den Default der Ablage der Sessiondaten in Dateien verwenden will. Dann bräuchte der Timestamp aber auch nicht extra in die Datenbank geschrieben werden – sondern der Session-Mechanismus würde sich im Hintergrund darum kümmern, im Script selber würde man ihn nur „in die Session“ schreiben.)

Ich hab das jetzt folgendermaßen umgesetzt; würde mich über eine kurze Bewertung eurerseits freuen:

Bei erfolgreichem Login:

$_SESSION['username'] = $usernameinput; $_SESSION['addr'] = $_SERVER['REMOTE_ADDR']; session_name("sid"); session_set_cookie_params(1800); session_cache_expire(1800);

Auf geschützter Seite:

if (isset($_SESSION['username'] and $_SESSION['addr'] == $_SERVER['REMOTE_ADDR'])) { //WEBSITE ANZEIGEN { else { //LOGIN FORMULAR ANZEIGEN }

Und auf der Logout .php einfach ein session_destroy();