LVS SESSIONS oder Cookie bassiertes Login

Status
Für weitere Antworten geschlossen.

ABC

abgemeldet
21 April 2006
3.851
444
Hallo

Für ein Projekt, wofür die Daten auf viele Webserver (Lastverteilung) Scripte und Datenbanken repliziert werden eignet sich laut meiner Fachlektüre eine Cookie Authentifizierung viel mehr wie eine Sessions bedingte Authentifizierung.

Hier bei geht es nicht um ein über Cookie ermöglichtes Auto Login sondern um das starten der Session selbst, oder das Verwalten via Cookies (d.h. Mit jedem Zugriff ein Login Abgleich ohne Session).

Sessions bedingt:
Die Session wird gestartet und beibehalten, ganz gleich ob die Logindaten über die SessionsID oder Cookie oder ein Login Formular ankommen. Der Abgleich findet immer dann statt, wenn eine Session nicht existiert.

Cookie:
Die Login Daten werden im Cookie abgelegt, und bei jedem Zugriff auf die Seite abgeglichen. Es wird keine Session gestartet.

Es geht jetzt darum, wenn ich ein Script auf viele Webserver Clone (Google/Yahoo Verfahren)

Script xy

S1xy S2xy S3xy S4xy

und der Besucher auf diese Lasten von Seitenaufruf zu Seitenaufruf verteilt werden, bringt mir die Session auf S1 gar nichts. Es wird hier beziffert, dass man sich im schlimmsten Fall 4 Mal einloggen müsste, da das Cookie immer auf bestimmte Hosts festgelegt werden muss, der Autologin auch nicht viel bringen würde.

In der Praxis habe ich das nach gespielt und festgestellt, das es vollkommen richtig ist.

ww1.xy (eingeloggt)
ww2.xy (erneut einloggen müssen)
ww3.xy (erneut einloggen müssen)

Und es sollte ja klar sein, dass es normal ist. Klar gibt es heut zu Tage auch Lastverteiler in (LVS) Strukturen, die so was vorbeugen, doch taucht auch hier ein Problem auf, sobald sich die Besucherzahl ins unbewältigbare steigert, nehmen irgendwann die Sessionen mehr Platz ein, als auf den Server verfügbar. Dahinter, die aktiven Sessionen würden von hinten her gelöscht werden. Nur ein LVS mit einem IP-Tunnel verfahren kann so was bewältigen. Jedoch ist dieses System immerhin noch leicht anfällig, und nur schwer und aufwendig zu warten, sodass auch viele Riesen darauf verzichten.

Um es auf den Punkt zu bringen. Was nützt mir ein Session bedingtes Login, wenn es auf Viele Server verteilt werden sollte. Macht das überhaupt Sinn, wenn ich weiß, 250 Aktive User überlasten ein Forum oder der gleichen, und es besuchen micht 2000 gleichzeitig? Macht es Sinn den Login auf jedem Server extra abzuarbeiten, und damit auch den Severspeicher mit den Sessionen zu zu müllen? Letzt endlich passiert mit dem Autologin doch fast das gleiche.

Meine Frage ist, warum sollte man das nicht gleich via Cookie lösen!

Ich habe folgenden Hintergedanken. Ich habe ein VMS1 in Betrieb. Dies hat ein Sessionsbedingtes Login. Das VMS1 ist meist so ausgereizt, dass es geclustert auf Servern liegen sollte. Jetzt müsste sich aber jeder User auf jedem Server einloggen. Ich könnte das via Cookies lösen, in dem ich den Login auf den ganzen Host erlaube. Doch dann frage ich mich gleich, lohnt es sich dort wenn schon geclustert wird, nicht gleich das ganze ablegen der Session (Zumüllung) des Servers auszubauen. Im Endeffekt ist es 1 SQL mehr pro Abfrage. Allerdings die Möglichkeit so viele Server zu beschäftigen wie beliebig. Ein Lastverteilung auch per Zufall möglich.

Ich würde mir gerne die Vor bzw. Nachteile von euch anhören. Vielleicht gibt es bessere Lösungen. Wichtig ist, die Lösung sollte mit jedem Script gehen. Ich möchte mir mit RSYNC, Clones meiner Webseiten auf verschiedenen Webservern ablegen, und die alle im LVS gleichmäßig belasten.
 
Zuletzt bearbeitet:
neija einer der Vorteile von Session basierten Logins ist natürlich, dass im Cookie keinerlei Login-Infos stecken, und so anfällig wie du LoadBalancer-Technicken beschreibst ist das komplett falsch, das sind mitlerweile sehr sehr robuste Systeme, allen Vorran Squid
Klar haben Cookie basierte Systeme auch Vorteile, aber es bleibt eben der Negativaspekt, dass LoginDaten auf dem Rechner gespeichert werden.

Ein anderer Ansatz:
Man könnte zB Sessions nutzen und den Session-Key natürlich in einem Cookie speichern, die Session-Daten werden nun nicht auf der Platte gespeichert sondern in einer Inno-DB Tabelle (macht Flickr so) oder es gar in einem Memcached-Daemon.
Viele Wege führen nach Rom ;)

Edit: achso die Aussage, dass IP-Tunneling nicht von den großen genutzt wird ist falsch ;) Squid wird von so gut wie jedem großen Dienst genutzt.

Edit2: das Problem in deinem VMS wird zu 90% Sicherheit net an den Sessions liegen ;) Nimm doch mal nen externen leistungsfähigen DB-Server, der dafür optimiert ist, denn die DB ist IMMER das bottleneck
 
Edit2: das Problem in deinem VMS wird zu 90% Sicherheit net an den Sessions liegen ;) Nimm doch mal nen externen leistungsfähigen DB-Server, der dafür optimiert ist, denn die DB ist IMMER das bottleneck

Das ist sicherlich schon richtig, allerdings habe ich das nicht nur mein VMS drauf liegen, sondern u.a. auch mein Image-Hosting. Das andere ist, dass ich mit einem Replikat doch sehr sicherer Lebe, ein besseres Livebackup kann man sich nicht wünschen. Wenn der Master flöten geht, ist das nächste Replikat höchstens ein paar Sekunden entfernt.

Und genau deshalb will ich Clonen. Weil ich will das Prinzip, jeder Server hat seine eigne Daten uns sein eigenes Replikat. Der Master Datenbankserver ist der einzigste in seiner Mitte, der nur die DB hat.

Warum?

-Ganz einfach aus Wartungsgründen. Krazt ein Server ab, wird übernimmt einfach x beliebiger seinen Dienst. Krazt der Datenbankmaster ab, habe ich viele Replikate. Die Server sind und bleiben alle austauschbar.

Um es kurz zu machen, wenn mir XY abkratzt, kann yz für ihn sofort einspringen. Und so ein abkratzen, kann vom Hardwareschaden, DNS Problem bis zur DDos Attacke sein....

Sicher müssen die Livedaten ehe über den DB Server.

Klar haben Cookie basierte Systeme auch Vorteile, aber es bleibt eben der Negativaspekt, dass Login Daten auf dem Rechner gespeichert werden.

Das ist aber bei der Session noch viel schlimmer.
1.) Wird die Session ID (key) auch über Cookie oder Browser übergeben.
2.) Und sie kann gar im HTTP-Referrer auftauchen und so ausgelesen werden.

Der Zugriff über eine Session kann daher nicht sicherer sein. Wer das Cookie ausliest, der liest auch im gleichen Weg die Session ein.

Dagegen kann man nur Schutz finden, wenn man die Sessionid extra verschlüsselt. Beispielweise durch die eigene IP. Und nur die IP weil sie eindeutig ist. Nur das bringt Login Nachteile Beispielweise, wenn sich das Verschlüsselungselement (in dem Fall IP) ändert.

Weil in PHP man die SessionsID vor dem Sessionstart änder muss, wenn man diese selbst bestimmen möchte. Aber welche neue IP der User hat, weiß man erst nach dem Login (wer loggt sich ein?). Genau das Gleiche bei Nicknamen etc.

Die Sessionen in einer Datenbank zu speichern, mag evtl. etwas schneller sein, es benötigt jedoch zumindest gleich viel Leistung wie das Cookie. (Beide greifen nur 1 Mal por Abruf auf die Datenbank zu).

Ich sehe also immer noch keinen Vorteil einer Session, bzw. Nachteil eines Cookies. Ich weis nur, dass ich immer Sessionsbedingte Authentifizierungen programmiert habe. Und jetzt sehe ich wie unbrauchbar sie werden.
 
Zuletzt bearbeitet:
Der Zugriff über eine Session kann daher nicht sicherer sein. Wer das Cookie ausliest, der liest auch im gleichen Weg die Session ein.

Naja wenn jemand die Session aus der Cookie hat, kann er zwa damit isch "einloggen", aber nur solange die Gültig ist. Stehen drin die Logindaten, kann er sich im grunde immer einloggen, und nciht nur das, er könnte die Logindaten ändern! Bei den meisten Seiten muß man das alte PW eingeben um ein neues zu erzeugen, das ginge nicht wenn er nur die session hat.

Und wenn es dann so etwas wie hier bei klamm gibt (mit einem neuen Login, alle anderen Sessions löschen), ist es doch ein wenig sicherer...
 
Eindeutig Sessions und dann auch die ganze billige Variante... Sessions in der Datenbank. Wenn du PHP verwendest ist der umstellungsaufwand sogut wie NULL. Auf Cookies würde ich nicht setzen... es gibt immer mal Sachen da ist es praktisch wenn man was in einer Sessions zwischenspeichern kann.

Es gibt natürlich auch unzählige andere Methoden... die oben erwähnte ist aber in meine Augen die beiweitestem einfachste. Der implementierungs Aufwand in bestehende Systeme ist gleich 0, der Wartungsaufwand auch, es ist egal wie das System ausbalanciert und skaliert wird, die einzige anforderung an den Besucher ist ein Cookie, und du schafst dir keinen neuen single point of failure.

Das ist aber bei der Session noch viel schlimmer.
1.) Wird die Session ID (key) auch über Cookie oder Browser übergeben.
2.) Und sie kann gar im HTTP-Referrer auftauchen und so ausgelesen werden.

1. das Problem hast du immer... auch bei Cookies und bei Cookies wäre es noch schlimmer, da die Daten im Cookie nicht zeitlich begrenzt sind. (wenn doch hast du im endeffekt sessions)

2. ähm nein... ausser du aktiviert das automatische anhängen von Session Ids.
 
1. das Problem hast du immer... auch bei Cookies und bei Cookies wäre es noch schlimmer, da die Daten im Cookie nicht zeitlich begrenzt sind. (wenn doch hast du im endeffekt sessions).

Da möchte ich aber Einspruch erheben. Ich speicher doch kein Passwort ins Cookie. Es wird ein Hash gepseichert, der ganz genau wie die Session es aucht tut, eine bestimmte Lebensdauer hat. Das Passwort kann nie aus dem Cookie gelesen werden. Und wer an den Hash kommt, kommt auch an die PHPSESSID. Sie wird in 99,9% der Fällen auch im Cookie übergeben.

Überzeuge dich selbst. Es gibt das Firefox Addon "Web Developer Toolbar" dort kannst du dir die Cookies ein uns absellten. Css ein und abstelltn, Java, Javascript. Ja und man kann sich die Cookies zu jeder Seite sammt für den Menschen lesbaren Inhalt anzeigen, und diese auch preperieren. So wenn du dich beispielweise hier im Forum einloggst, hast du auch ein Cookie mit deiner SessionsID auf der HDD.

Und deshalb nochmals. Bei einer Cookie Authentifizierung ist auch ein Hash auf der HDD. Wo ist der Unterschied, bzw. Vor- Nachteil?
 
Da möchte ich aber Einspruch erheben. Ich speicher doch kein Passwort ins Cookie. Es wird ein Hash gepseichert, der ganz genau wie die Session es aucht tut, eine bestimmte Lebensdauer hat. Das Passwort kann nie aus dem Cookie gelesen werden. Und wer an den Hash kommt, kommt auch an die PHPSESSID. Sie wird in 99,9% der Fällen auch im Cookie übergeben.

Das meint ich ja... wenn du ein Hash im Cookie speicherst der nur eine bestimmte gültigkeit hat (Servergestützt), dann hast du im endeffekt auch wieder Sessions. Sprich du baust dir damit dein eigenes Session-System, was natürlich auch vorteile bringen kann. Die frage ist nur Aufwand/Nutzen... wie gesagt wenn die Anwendung schon mit PHP Sessions läuft kannst du dir die arbeit sparen und einfach ein benutzer definierten Sessionhandler auf DB-Basis schreiben. Und das funktioniert problemlos mit jeder Art von Loadbalancing die für "kleinere" Projekte in frage kommt.

Und deshalb nochmals. Bei einer Cookie Authentifizierung ist auch ein Hash auf der HDD. Wo ist der Unterschied, bzw. Vor- Nachteil?
Siehe oben... es gibt kein, es ist nur eine frage von Kosten/Nutzen. Weil du baust zwangsläuftig ein Session-System mit Cookies nach, oder dir gehen am ende Sicherheitsvorteile verloren. Das ist dann fall wenn ich mit dem Cookie nach nem halben Jahr (oder 1nem Tag) immer noch als User X authentifiziert werde. Wenn bei Sessions das Cookie wegkommt dann ist das noch ein paar Minuten/Stunden gültig... danach ist es Müll.
 
Zuletzt bearbeitet:
Ah jetzt wirds klarer. Gibt es da irgendwo eine Beschreibung? Müsste mich da erst schlau machen, wie es genau geht. Probieren geht schliesslich über studieren. ;)
 
Da möchte ich aber Einspruch erheben. Ich speicher doch kein Passwort ins Cookie. Es wird ein Hash gepseichert, der ganz genau wie die Session es aucht tut, eine bestimmte Lebensdauer hat. Das Passwort kann nie aus dem Cookie gelesen werden. Und wer an den Hash kommt, kommt auch an die PHPSESSID. Sie wird in 99,9% der Fällen auch im Cookie übergeben.

Wieso benutzt du dann keine Session?

Und deshalb nochmals. Bei einer Cookie Authentifizierung ist auch ein Hash auf der HDD. Wo ist der Unterschied, bzw. Vor- Nachteil?

Wie willst du irgendwelche (Benutzer-)Daten mit deiner Cookie-Methode zuverlässig speichern? Genau das vereinfacht dir die Session. Und da du dir den Speicherort selber aussuchen kannst, ist die Session von der Performance betrachtet kein extremer Engpass - deine Pseudosession müsste ja auch erst die Daten überprüfen ;)
Edit: https://de.php.net/manual/de/function.session-set-save-handler.php
Zu langsam ;)
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.