Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: SRP - Logindaten in Datenbank speichern

  Alt 25. Mär 2007, 04:48
Hi,

im Attachment mal meine Originalsource für die beiden "Datenbanken" die die DLL von Hause aus unterstützt. Du musst im Grunde nur die Methoden

Delphi-Quellcode:
    function DoLookup(const Ident: WideString): WideString; override;
    function DoStore(const Ident, Data: WideString; IsEphemeral: Boolean): WideString; override;
    procedure DoDelete(const Ident: WideString); override;
anders implementieren. Zb. ein TDataModule erzuegen in TSRPDatabaseINI.Create das deine SQL anspricht. In obigen Methoden dann deine Datensätze suchen,löschen oder speichern.

Bedenke aber eines, meine modifizierte Version des SRP6a hat zu Folge das bei jedem erfolgreichen Login

- einmal .DoLookup() aufgerufen wird
- einmal .DoStore() aufgerufen wird.

Im Orginal SRP sind die registrieren Nutzerdaten, einmal registriert, für immer unveränderlich. Man liest dann nur noch die Datenbank.
Bei meinem modifiziertem SRP kommt nun noch eine Speicheroperation bei jedem erfolgreichem Login hinzu. Das liegt daran weil defakto sich der Passwortverifier und somit gegebenenfalls auch auf Benutzerwunsch hin das benutzte Passwort, ändert.
Dh. der Nachteil der zusätzlichen Speicherung wird zum Vorteil weil der Benutzer ohne das es der Server mitbekommt zu jeder Zeit sein Passwort ändern kann. Natürlich auf mathem. beweisebar sichere Art&Weise.

Der einzigste kritische Moment ist die Registration eines neuen Users. Du soltest ein Boolean -> Registered und einen Datumswert in deine DB aufnehmen. IsEmpheral = True bei .DoStore() bedeutet das der User erstmal nur einen Registrations-Account bekommen hat. Nun sollte innerhalb einer limitierten Zeitspanne der Benutzer sich regulär einloggen und sein richtiges Passwort ändern. IsEmpheral sollte dann FALSE werden (nach erfolgreichem Login). Solange dies nicht der Fall ist MUSST du aus Sicherheitsgründen die Zugriffsrechte des Benutzers stark einschränken. Denn der Registrationsprozess ist der einzigste Zeitpunkt bei der eine MITMA->Man in the middle Attack möglich wäre. Die zeitspanne zwischen Ausgabe eines Registrationskeys und 1. erfolgreicher Anmeldung + Änderung des Passwortes durch den User sollte sehr kurz sein. Und solange IsEmpheral auf TRUE ist darf über diesen Acccount kein Zugriff auf Rechnerresourcen erlaubt sein.

Ansonsten eine sehr gute Entscheidung.

Gruß Hagen
Angehängte Dateien
Dateityp: pas srpdata_131.pas (5,7 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat