kann mir jemand einen Tipp geben, wie ich am besten einen sicheren Login mit PHP programmiere.
Eine Session-Funktion wird bei PHP schon mitgeliefert. Warum willst du das Rad neu erfinden?
Momentan nutze ich sha1 und erstelle hier eine Kombination von dem User-Password und einem Default-Password, welches ich generiert hatte.
Diesen Hash speicher ich dann bei Login als Cookie und bei jedem Seitenaufruf wird geprüft, ob der Hash-Wert, der das Cookie gespeichert ist, passt.
Ist das sicher, oder was würdet Ihr empfehlen?
Üblicherweise besteht die Sitzungskennung aus einer langen Kette zufälliger Zeichen, und zwar mit Grund:
Zum einen ist das theoretisch (!) sicherer als dein Weg, weil aus so einer Zufallskennung keine Rückschlüsse mehr auf andere Daten gezogen werden können – es existieren ja schlichtweg keine anderen Daten.
Vor allem aber kann, zweitens, jeder, der an der Verbindung mitlauscht, deine Bastelkennung abfangen und sich fürdahin bis zur Änderung des Passworts (das bedeutet in aller Regel: bis in alle Ewigkeit) nach Belieben anmelden. Insofern wäre es beinahe wurscht, ob du das Passwort selbst überträgst oder, wie jetzt, eine Prüfsumme desselben. Habe ich eines von beiden, bin ich drin, heute, morgen, in zwei Jahren.
Jede Session, zu der man sich anmelden muss, muss auch geschlossen werden können. Bei dir geht das nicht, weil die Kennung statisch ist.
Also Beispiel senden wir unseren Kunden eMails einen Link mit einem SHA1-Hash - wenn dieser passt, kann der User zum Beispiel eine Bewertung abgeben, für seinen Auftrag.
Die Hascherei scheint es dir angetan zu haben. Drogen haben aber noch jeden betrogen, und du bekommst keine Sicherheit, nur, weil du irgendwo "SHA1" (oder dergleichen) draufschreibst.
Verwendest du für diese Bewertungsfunktion womöglich auch noch das eingangs beschriebene Passwort seines Kundenkontos? Toll. Dann brauche ich nicht einmal an der HTTP-Leitung lauschen, ich kann auch sein E-Mail-Postfach durchschauen, um in seinem Konto rumzufuhrwerken
Soll der Kunde ohne Anmeldung einen Auftrag bewerten können, dann schicke ihm einen Zufallswert, der entsprechend mit Auftragsnummer verknüpft in deiner Datenbank gespeichert und mit einem Verfallsdatum versehen ist. Mit diesem Wert kann er dann ohne weiteren Umstand seine Meinung abgeben, und zwar nur seine Meinung abgeben, nichts anderes, und dies auch nicht bis zum Sankt Nimmerleinstag, sondern bis in drei Monaten (zum Beispiel, je nachdem, was das für Aufträge sind) und gegebenenfalls vielleicht auch nur einmal bzw. nur hinzufügend zu vorigen Bewertungen des Auftrags.