Philipp Hasenfratz: Sicheres Login / Wo Logindatent auf dem Server ablegen? DB?

Beitrag lesen

Halihallo Thomas

NOK. Wie ich es vermutet habe, das ist katastrophal!
Du musst *umbedingt* login *und* passwort übergeben! - Ansonsten muss
ein Angreifer nur den Login erraten und das ist nicht sehr schwierig.

Ich glaub nicht,

Glaube nicht, Wisse! - Oder um es mit den Worten der Borg zu sagen:
Glaube ist irrelevant! - Sie werden gehackt werden! ;)

daß man das Login so leicht erraten kann.

Was hälst du für wahrscheinlicher:
Login mit zwischen 5-8 Buchstaben erraten, der nebenbei gesagt,
oftmals Sinn ergibt (wie z.B. Firmenname, Vor- oder Nachname etc.)

oder aber Login *und* Passwort zu erraten, wobei Passwort im Optimal-
Fall eine völlig randomisierte Zeichenkette ist?

Was auch immer du für wahrscheinlicher erachtest... Denke immer an
das Prinzip des schwächsten Gliedes der Kette! - Ich hoffe du
verstehst mich jetzt... Jedwelcher anderer Sicherheitsaspekt, den
du implementierst ist völlig irrelevant, wenn du hier schlampig
programmierst! - Und das ist schlampig, im höchsten Grade sogar.

Da die tatsächlichen html Seiten ja serverseitig mit php aufgebaut werden, befindet sich das hidden-Feld ja nur auf der Seite und kann von jedermann gefunden werden, wenn man sich tatsächlich erfolgreich eingeloggt hat.

Wer bei Sicherheit genötigt ist für seine Lösung zu argumentieren
ist bereits gehackt! :-)

Kleines Szenario: Deine Software wird von einem Firmennetzwerk
benutzt. Jeder Mitarbeiter hat seinen Account. Ein Mitarbeiter geht
in die Mittagspause und vergisst seine Arbeitsstation zu sperren bzw.
den Browser zu schliessen. Ein halbswegs intelligenter anderer
Mitarbeiter geht mal kurz an seinen Computer, sieht sich den
Quelltext deiner Seite an und hat schon login (ggf. sogar Passwort)
des anderen Mitarbeiters, mitdem er sich von nun an immer wieder
selber einloggen kann.

Komm jetzt bitte nicht mit dem Argument, dass nur der login im
Formular steht und somit keine Gefahr bestünde... Es mag sein, dass
man mit einem login nicht viel anstellen kann, aber es ist bereits
Wissen für den Hacker. Wissen ist Macht. Er hat sozusagen bereits
einen Teil des Puzzels bzw. Loginschlüssels und muss nur noch das
Passwort erraten. Naja, ist doch schwer ein Passwort zu erraten?

  • Egal, es *spielt keine Rolle*! - Dass man dies kann ist schlimm
    genug, warum also noch einfacher machen in dem man bereits einen
    Teil (der Login) sichtbar macht?

Fazit: Niemals Login und Passwort in den Formularen mitschleppen,
sondern "anonymisiert" über Sessions, denn da sieht man Clientseitig
lediglich eine SessionID und ein SessionKey, mit dem man ggf. mal
30 Minuten auf den Account zugreifen kann, jedoch nachher weder
damit weiterarbeiten, noch erneut einloggen kann. Wenn schon ein
Risiko besteht (und Menschen die nicht ausloggen implizieren dies),
so muss man versucht sein es zu minimieren.

Die Werte für "name" und "value" des hidden-Feldes werden zufällig erzeugt ("unsinnige Werte") und in der Datenbank abgelegt, die Weitergabe dieser Werte entspricht damit im Prinzip der Weitergabe von Login und Passwort (und Überprüfung).

_Das_ ist bereits gut und entspricht etwa der Session-Methode. Login
und Passwort sind nicht mehr lesbar/benutzbar, dennoch dienen sie
der Serverapplikation den Benutzer eindeutig zu erkennen und zu
authentifizieren. Das Wort "Überprüfung" würde ich aber noch stärker
betonen, denn dieses ist zentral.

Wie werden die Daten einer Session übertragen?

Gar nicht, sie befinden sich auf dem Server und der Client sieht
davon nichts. Das ist der Trick :-)
Der Server empfängt ein SessionID/SessionKey-Paar (über URL oder
Cookie). PHP weiss dann, in welcher Datei die Daten der Session
stehen und stellt diese deinem Script zur Verfügung (z.B. login und
passwort). Äm, PHP verwendest du, oder?

Wie leicht kommt man an die Daten der Datenbank?

Du hast doch gesagt, du legst dort das zufällige Login/Passwort ab?
Auslesen tut man es dann mit dem SELECT-Statement :-)

Kann ich die Informationen an einer anderen Stelle auf dem Server ablegen?

Natürlich, in Dateien zum Beispiel :-)
Aber im Falle von PHP kann dir dieser Dienst durch den bereits
implementierten Session-Mechanismus angenommen werden.

Viele Grüsse

Philipp

--
The only program that runs perfectly every time, is a virus.