Bodo Thiesen: Was haltet ihr von meinem User-Login-System?

Beitrag lesen

was haltet ihr von diesem System?

Schrott (aber das haben Dir andere ja schon gesagt)

Das Passwort ist stark verschlüsselt: md5(sha1(md5(PASSWORT.anhängsel)))

1. NUR md5 ist sicher genug. Wenn Du aber unbedingt SHA1 willst, kannst Du es gerne benutzen, die beiden MD5-Aufrufe fressen aber nur unnötigerweise Rechenzeit.
2. MD5 als auch SHA1 sind keine Verschlüsselungsalgorithmen.

"Angemeldet bleiben"

[...] der vorhandenen Session [wird] folgendes beigefügt:

  • Benutzername $_SESSION['name']=name
  • IP $_SESSION['ip']=ip des besuchers
  • $_SESSION['logg']=true;

Schritt 1:
vi /etc/hosts, umlenken Deiner Domain auf 127.0.0.1
Schritt 2:
Eigenes PHP-Skript über Deine Domain aufrufen (landet auf meinem Rechner). Diese setzt Deine Cookies auf von mir zu wählende Werte.
Schritt 3:
vi /etc/hosts, Umlenkung Deiner Domain auf 127.0.0.1 rückgängig machen
Schritt 4:
Als beliebiger Benutzer Deinen Webservice nutzen und dabei beliebige Mengen Schaden anrichten.

  • entspricht die variable ip der aktuellen ip des besuchers

Wie soll dann das Angemeldet bleiben funktionieren?

  • ist der wert der variable logg = true

Muß eigentlich, wenn obige Voraussetzungen erfüllt sind auch zutreffen.

Vorschlag:

Nach dem Senden von Benutzername + Passwort wird "Benutzername-MD5(Benutzername+Passwort+Magic)" in Form eines Session-Cookies an den Benutzer zurückgesendet. Bei jedem Request wird geprüft, ob der Session-Cookie vorhanden ist. Wenn ja, wird der Benutzername isoliert, in der Datenbank das Passwort abgerufen und dann wieder "Benutzername-MD5(Benutzername+Passwort+Magic)" berechnet. Stimmt das mit dem vom Benutzer übergebenen Wert überein, ist er eingeloggt, sonst nicht. Ob man den Magic global für alle Benutzer konstant setzt, oder ob man diesen Wert pro Benutzer beim Login zufällig generiert, bleibt sich erstmal relativ gleich. Das Argument Plaintext-passwort-equivalent zählt auch nicht, da auch das Übertragen des Passwortes beim Login unverschlüsselt passiert. Soll das Passwort SHA1-Codiert in der Datenbank gespeichert sein, so muß natürlich auch die SHA1-Codierte Version in den Session-Cookie eingerechnet werden.

Wenn du es jetzt noch ganz sauber machen möchtest, baust Du noch eine Codierungsstufe auf JavaScript-Basis ein:

Im Login-Formular kommt noch ein type=hidden, name=challeng, value=zufall rein, der submit-button bekommt noch ein onclick verpasst. Dort steht eine Funktion, die das Passwort zusammen mit dem Challenge md5summiert, und das Ergebnis dieser md5sum-Berechnung statt des Klartextpasswortes als Passwort übermittelt (zusammen mit dem Challenge, das Du natürlich vorher in der Datenbank gespeichert hattest). Auf diese Weise wird das Passwort nicht mehr im Klartext übertragen.

Ich denke, so funktioniert das, werde das demnächst mal selber zusammen programmieren.

Gruß, Bodo