1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Lebensdauer von Passwörtern begrenzen

  • osiris
  • 27. März 2008 um 12:00
  • Unerledigt
  • osiris
    8
    osiris
    Mitglied
    Punkte
    695
    Beiträge
    109
    • 27. März 2008 um 12:00
    • #1

    Hallo,

    ich will die Lebensdauer von Passwörtern in meiner DB begrenzen. Ich habe mir dazu schon mal ein paar Gedanken gemacht und mal etwas das Web durchforstet.

    Dort findet man halt viel dazu, wie man Passwörter erstellt, aber nichts zu Begrenzung der Lebensdauer.

    Ich hab auch auf php.net mal gezielt nach Funktionen gesucht, die Begriffe wie time, expire, password usw. enthalten. Da kam aber nichts sinnvolles raus.

    Meine Idee:

    Der Countdown für die Lebensdauer (x) des Passwortes startet mit dem ersten Login des Users. Deshlab müsste man diesen Zeitpunkt in der Datenbank ablegen.
    Dann müsste es ein Skript geben, dass in bestimmten Zeitabständen prüft, welche Passwörter ungültig sind und diese aus der DB löscht.
    Dabei stellen sich mir 2 Probleme:
    Wie schreibe ich ein Skript, das automatisch startet?
    Und wie müsste man den Zeitabstand wählen, damit jedes Passwort auch genau nach x Tagen ungültig wird und nicht 5 Minuten fürher oder 3 Stunden später?

    Vielleicht könnt ihr mir ja mal paar Tipps geben.
    Links würden genügen.
    Danke!

  • Trux
    12
    Trux
    Mitglied
    Reaktionen
    26
    Punkte
    1.396
    Beiträge
    274
    • 27. März 2008 um 12:05
    • #2

    warum checkst du nicht einfach beim einloggen des users ob das erstellen des alten passwortes schon $x monate aus ist und wenn ja, dann zwingst du ihn, ein neues zu erstellen?

    Zitat von osiris

    Dann müsste es ein Skript geben, dass in bestimmten Zeitabständen prüft, welche Passwörter ungültig sind und diese aus der DB löscht.


    und wie soll sich der user authentifizieren, nachdem du ihm das pw gelöscht hast?

  • spinball
    11
    spinball
    Mitglied
    Reaktionen
    67
    Punkte
    1.192
    Beiträge
    223
    • 27. März 2008 um 12:45
    • #3
    Zitat von osiris

    Wie schreibe ich ein Skript, das automatisch startet?



    Soetwas wird üblicherweise von einem Serverdienst verwaltet und hat nichts mit deinem eigentlichen Programm zutun. Du schreibst dein Programm quasi ohne Achten auf den Ausführungszeitpunkt und sagst deinem Server zum Beispiel, dass er dieses Programm jeden Tag um 13 Uhr ausführen soll (Siehe: Cronjob).

    In deinem Problemfall ist das aber gar nicht notwendig. Du kannst diese Überprüfung bei jeder Anfrage stellen:

    PHP
    UPDATE users SET password = '' WHERE DATE_ADD(lastlogin,INTERVAL 1 DAY) < NOW();



    Diese SQL-Abfrage setzt die Spalte password überall auf einen leeren String, wo das Datumsfeld lastlogin mindestens einen Tag alt ist.

    Dann kann man sich aber mit jenen Accounts nicht mehr einloggen. :winking_face:
    Eine bessere Idee wäre, das Problem auszulagern: Und zwar solltest du die Passwörter nicht gleich löschen, sondern die restliche Funktionalität deiner Programme einfach für die blockieren, welche alte Passwörter benutzen.

    PHP
    SELECT * FROM users WHERE id = $id AND DATE_ADD(lastlogin,INTERVAL 1 DAY) < NOW();



    Insofern die Spalte id deine Benutzertabelle eindeutig durchnummeriert, kannst du mit dieser Abfrage feststellen, ob der aktuelle Benutzer - identifiziert durch $id - ein altes Passwort benutzt. Falls ja, liefert die Anfrage eine Zeile zurück. Falls nicht, keine.

  • osiris
    8
    osiris
    Mitglied
    Punkte
    695
    Beiträge
    109
    • 8. April 2008 um 13:22
    • #4

    Hallo,
    ich hab das jetzt so realisiert

    PHP
    $cpw = mysql_query("SELECT * FROM tabelle WHERE user='$user' AND firstlogin > DATE_SUB(NOW(), INTERVAL 48 HOUR)");
    				$val = mysql_fetch_assoc($cpw);
    
    				if ($val != NULL) {
    
    					header("Location: nextpage.php");
    					exit();
    				}
    
    
    				else {
    
    
    					echo "Ihr Passwort ist nicht mehr gültig.";
    					session_destroy();
    				}
    Alles anzeigen

    Wenn das Passwort abgelaufen ist, dann ist $val also immer leer.

    Nun mal noch eine andere Frage dazu:
    Wenn der User sich ausloggt, möchte ich ihm gerne mitteilen, wie lange sein Passwort noch gültig ist.
    Ich hab da mal folgendes zusammengebastelt:

    PHP
    $exp = "DATE_ADD(firstlogin, INTERVAL 48 HOUR)";
    
    
    $result = mysql_query("SELECT DATEDIFF($exp, NOW())  FROM sac_users WHERE user=$user");


    Hier wird zuerst das Datum ausgerechnet, an dem das Passwort verfällt, davon wird dann das aktuelle Datum abgezogen.
    Scheint mri aber eher ein gewagtes Konstrukt zu sein. Das ganze funktioniert momentan schon deshalb nicht, weil nicht weiß, wie ich den eigentlichen Wert des Query bekomme.

  • beefy
    13
    beefy
    Mitglied
    Reaktionen
    18
    Punkte
    1.683
    Beiträge
    304
    • 8. April 2008 um 17:26
    • #5
    Zitat von osiris

    Scheint mri aber eher ein gewagtes Konstrukt zu sein. Das ganze funktioniert momentan schon deshalb nicht, weil nicht weiß, wie ich den eigentlichen Wert des Query bekomme.

    Hab die SQL-Query jetzt nicht angeschaut. Den Wert wuerdest du jedenfalls so bekommen:

    PHP
    // Entweder so:
    $res = mysql_query("SELECT DATEDIFF(...)");
    $row = mysql_fetch_array($res);
    $wert = $row[0];
    
    
    // Oder so:
    $res = mysql_query("SELECT DATEDIFF(...) AS wert");
    $row = mysql_fetch_assoc($res);
    $wert = $row['wert'];
  • DomiN
    8
    DomiN
    Mitglied
    Reaktionen
    5
    Punkte
    585
    Beiträge
    111
    • 5. Juni 2008 um 06:10
    • #6
    Zitat von spinball


    Wie schreibe ich ein Skript, das automatisch startet?

    Zitat von spinball

    Soetwas wird üblicherweise von einem Serverdienst verwaltet und hat nichts mit deinem eigentlichen Programm zutun. Du schreibst dein Programm quasi ohne Achten auf den Ausführungszeitpunkt und sagst deinem Server zum Beispiel, dass er dieses Programm jeden Tag um 13 Uhr ausführen soll (Siehe: Cronjob).

    Ich hatte mal das Problem, dass ich auf dem Server keine Cronjobs verwenden durfte. Trotzdem brauchte ich eine Routine, die zu bestimmten Zeiten ausgeführt wird und diverse Berechnungen und Queries durchführte.
    Ich hab daher ein Script geschrieben, das bei jedem Seitenaufruf lief. Es hat nachgesehen, ob es schon wieder Zeit für einen Durchlauf ist. Es hat ein paar Kniffe gebraucht, um zu verhindern, dass es mehrmals gleichzeitig lief.
    Es wurde also erst dann berechnet, wenn die Werte das erste mal nötig waren. Also wenn der erste User diese abgefragt hat.

    Später kam dann, dass einige Resultate per Mail verschickt werden sollten.
    Daher mussten diese Berechnungen zu den richtigen Zeitpunkten erfolgen, unabhängig ob ein User Online war oder nicht.
    Es stellte sich noch immer das Problem, dass auf dem Server seitens des Hosters keine Cronjobs erlaubt waren.
    Wir haben es dann so gelöst, dass das Berechnungsscript von mehreren anderen (zwecks Ausfallsicherheit) stellen aufgerufen wurde. Wir haben einfach den Aufruf mittels Passwort und IP Adresse gefiltert, dass niemand "unbefugter" die Berechnung starten konnte. Die Lösung um gleichzeitiges Ausführen zu verhindern hatten wir ja bereits drin.

    Es muss also nicht immer ein Cronjob auf dem eigentlichen Server sein. Man muss nur das Script zu bestimmten Zeiten oder NACH einer bestimmten Zeit anstoßen. Das kann mitunter auch von Außen ausgelöst werden. Man sollte dann nur bedenken, dass diese Aufrufe genügend gegen Manipulation und Ausfälle abgesichert sind.

    Nur so als Denkanstoß :winking_face:
    LG

    It's physically impossible to lick your weenis, unless your a freak.

    DONE-IT TIENODhttp://www.tienod.com DI

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung