Hallo littleDave.
Diese Idee ist super. Vielen Dank.
Ich habe jetzt folgendes geplant:
- Es wird zusätzlich zu den (wenn falsch angewandt unsicheren) Secret-FastLogin-URLs ein Account-Manager mit 1-Klick-Einloggfunktion eingeführt. Dieser ist universell. Das heißt, die EXE ist nicht an den jeweiligen Nutzer, dessen Hardware oder das PHP-System (z.B. durch EXE-Append-Data) angepasst.
- Der Nutzer gibt die Zugangsdaten in das Programm ein und kann sie dort auch wieder löschen (wenn er auf einem fremden PC war).
- Das Programm sendet eine Anfrage an den Server. Dieser erstellt eine SessionID und gibt diese als HTTP-Content an das Programm zurück. Die SessionID ist Zeit-Terminiert und ist 1 Minute gültig (wird dann automatisch durch den abgelaufenen Timestamp gelöscht)
- Das Programm verschlüsselt den Benutzername und das Passwort, die mit einem Delimiter voneinander getrennt sind, mit der SessionID. Das Ergebnis ist der neue SecretKey. [Memo an mich: PHP-Encryption-Algorithmus in Delphi übersetzen]
- Der entstandene SecretKey, der nur 1 Mal gültig ist, wird per Browser-Aufruf (GET-Request) an das PHP-System gegeben. Der Knackpunkt hier ist, dass die SessionID nicht in der URL (und folglich im Verlauf) vorkommen darf. Ansonsten könnte man mithilfe der im Verlauf gespeicherten Daten den SecretKey anhand der SessionID entschlüsseln und man hätte die Zugangsdaten.
- Der Server muss also alle verfügbaren (gültigen) SessionIDs mithilfe der Entschlüsselung des SecretKeys durchprobieren. Ist der Delimiter (der Benutzername und Passwort voneinander trennt) anwesend, war die Entschlüsselung wahrscheinlich erfolgreich. [Problem: Genaue Kontrolle? Datenmüll mit zufällig dem Delimiter führt zu Login-Fehlschlag]
- Der Server führt den Loginvorgang durch (Login-Variablen setzen und HTTP-Redirect) und löscht die verwendete SessionID sofort -> SecretKey ist nicht wieder nutzbar.
Die Technik wird von mir zu einem späteren Zeitpunkt umgesetzt. Im Moment war mir die Idee und der daraus resultierende Plan wichtig.
Problematisch wird jedoch, dass ich durch Delphi
an Windows gebunden bin, obwohl das PHP-System logischerweise für alle Betriebssysteme ist. C++, das Cross-Platform ist, kann ich leider nicht.
Gruß
blackdrake