php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.10.2006, 13:03  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard Etwas komplexerer Login --> Keine Angst, Suche benutzt

Hallo

Also ich shreibe gerade an einem Login-Script! Mein alter Script (mit Cookies) hatte den grossen Nachteil, dass sich einige wenige aber wichtige benutzer nicht einloggen konnten, da sie Cookies nicht erlauben.

Ich bin nun daran dies zu verbessern, der Script sollte folgende Funktionen haben

1. Login nur für diese Session, wenn die option "nächstesmal automatisches login" deaktiviert

2. Login nächstesmal automatisc falls option aktiviert

3. Login auch möglich falls Cookies deaktiviert, "automatischer Login" - dann "automatischer Login" Option immer? auf deaktiviert.


Was hab ich mir schon überlegt:
Hab hier schon einiges in der Suche gefunden und auch das Tutorial von Ben, gelesen, also keine Angst, das ist mir auch alles klar, aber...

Ich sehe nun 2 Möglichkeiten: ich könnte mit Sessions arbeiten, die für die 1. Anforderung optimal ist, für die 2. Option würde ich dann die Session-Laufdauer erhöhen. In der Session würde sowas wie $_SESSION['login']=true stehen. Für 3. könnte man etwas mit der PHPSESSID machen, da ich mir vorstellen könnte trans_id einzuschalten, oder alternativ dazu falls trans_id aus, von Hand die SESSID anzuhängen. Allerdings, sehe ich da irgendwie nicht, wie ich die SESSID verwenden kann, da die User-Daten in einer DB gespeichert sind und diese ja in keinem Zusammenhang mit der SESSID stehen...

Die zweite Möglichkeit die ich da sehe, ist diejenige mit Cookie und Session. Für 1. würde der Cookie einfach die Lebensdauer 0 haben, und somit 1 zu 1 die Session wiederspiegeln. für 2. Würde der Cookie eine längere Lebensdauer erhalten. Im Cookie würde irgend eine mit md5 verschlüsselte Kombination von User-name und Passwort stehen, die so auch in der db steht und verglichen würde. Wenn Vergleich erfolgreich, dann würde eine Session erzeugt mit Inhalt $_SESSION['login']=true, dies aus dem Grund, dass nicht bei jedem Klick dann eine Datenbankabfrage gestellt werden muss. Für 3. würde ich dann diesen md5 hash via get anhängen und halt bei jeder Seite einen Datenbank-aufruf zur pw-überprüfung machen.

Nun ja, kompliziert, aber ich sehe keinen besseren Weg. Wie würdet ihr soetwas lösen. Ich weiss dass die Get-Übergabe unschön oder gar unsicher ist, auch das verwenden von Cookies und Sessions ist unschön...

Wie würdet ihr sowas angehen, bin foh um Anregungen...

Daanke


Zweite Möglichkeit
dethlef14 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.10.2006, 15:01  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Also ich habe es so gelöst:

Ohne auto login: User loggt sich ein, Session wird erstellt, fertig.
Mit Autologin: User loggt sich ein, Session wird erstellt, Cookie wird erstellt. Verlässt der User die Seite wird die Session inaktiv bzw. wird dann nichtmehr verwendet. Kommt der User dass nächste mal wird automatisch gecheckt ob ein Cookie existiert, wenn ja wird eine Session erstellt und der User ist online.

Dadurch ist das Problem ob der User Cookies aktiviert oder nicht auch gelöst. Falls er sie deaktiviert hat halt autologin keine Funktion, aber ansich funktioniert alles über Sessions.
Flor1an ist offline  
Alt 01.10.2006, 16:00  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard

Zuerst einmal: Du kannst mit Sessions keine Dauerhafte Loginfunktion machen.

Wenn ich das so lese, hast du die Überlegung hinter der Session auch noch nicht verstanden.
Eine Session teilt sich in 2 Teile. Zum einen die Sessionid, diese muss dir der Client jedesmal mitteilen, tut er dies nicht, ist die Session verloren, du kannst ihn also nicht mehr wieder erkennen.
2. Die Sessiondaten. Diese liegen auf dem Server, hier kannst du rein schreiben was du willst.

Um nun dafür zu sorgen, dass der User dir jedesmal die Session mitteilt, hast du 2 Wege.
1. Du verpasst ihm nen Keks mit seiner Sessionid, diese liest du jedesmal aus, schaust, ob die Session noch existiert und schaust, welche Daten in der Session drin stehen.
Vorteil dieser Methode: Du musst nicht an jeden Link und jedes Formular die SessionID anhängen.
Nachteil: Leute ohne Kekserlaubnis sind ausgesperrt.

2. Du hängst an jeden Link und jedes Forumlar seine SessionId an.
Vorteil: Kekse sind unnötig
Nachteil:
a)Eine Seite, die per Lesezeichen aufgerufen wird, kann niemals die aktuelle SessionID enthalten, damit wird er dabei niemals eingeloggt sein, selbst wenn er sich zuvor eingeloggt hat und eine SessionID bekommen hat, da diese seine aktuelle ID nicht übergeben wird.
b)Wenn er einen Link aus seiner Seite an jemand anderes übergibt, hängt da meist die SessionID mit dran, damit ist ohne zusätzliche Sicherheit der andere User nun mit den Rechten des Linksenders auf der Seite.

Vorteil der Session allgemein gegenüber Cookies. Wenn du Formulardaten in ner Session zwischen speicherst, dann kannst du dich auf deren unversehrtheit verlassen. Das ist leider bei Cookies nicht der Fall.

Das konstante Login bleibt aber auf jeden Fall an Cookies hängen, da Sessions immer irgendwann verfallen. Wie lange hängt von deiner PHP Config ab.
CC84 ist offline  
Alt 01.10.2006, 16:44  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von CC84
Vorteil der Session allgemein gegenüber Cookies. Wenn du Formulardaten in ner Session zwischen speicherst, dann kannst du dich auf deren unversehrtheit verlassen. Das ist leider bei Cookies nicht der Fall.
das ist auch bei sessions nicht der fall. es ist zwar schwieriger, aber dennoch möglich, die session trotzdem zu manipulieren. vor dem anfassen der session-daten muss also trotzdem nochmal neu validiert werden.

grüße
axo
axo ist offline  
Alt 01.10.2006, 17:17  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard Danke

Razor: tönt sinnvoll und einfach, werde ich probieren! du hast also trans_id für die nicht-Keksler aktiviert so wie ich das verstehe, oder hängst du sie "von Hand" an? Ich gehe mal davon aus, dass es also eine 100% sichere Lösung hier nicht zu geben scheint, liesse mich vom Gegenteil aber gerne überzeugen...
btw. was speicherst du im Cookie, schlichtweg etwas Ã* la $_Cookie['login']=true?

CC84: Hmmm... Stimmt, hatte das mit der Session Id falsch verstanden, für mich war da ausser der Dauer kein unterschied zw. Cookies und Sessions. Vielen Dank für deine Ausführungen.


Vielen Dank für eure Hilfe!
dethlef14 ist offline  
Alt 01.10.2006, 20:39  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard

Zitat:
Zitat von axo
Zitat:
Zitat von CC84
Vorteil der Session allgemein gegenüber Cookies. Wenn du Formulardaten in ner Session zwischen speicherst, dann kannst du dich auf deren unversehrtheit verlassen. Das ist leider bei Cookies nicht der Fall.
das ist auch bei sessions nicht der fall. es ist zwar schwieriger, aber dennoch möglich, die session trotzdem zu manipulieren. vor dem anfassen der session-daten muss also trotzdem nochmal neu validiert werden.

grüße
axo
Hast du da nen Artikel zu, wäre sehr interessant. Weil kann mir das gerade nicht so wirklich erklären, wie ein aussenstehender da Zugriff drauf bekommen sollte.
CC84 ist offline  
Alt 01.10.2006, 23:24  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

session.use_trans_sid kannst du global aktivieren. Die Option klebt de SID nur an, wenn der Keks nicht gesetzt werden konnte. Allerdings musst du die SID bei Redirects (Location-Header) immer explizit anhängen.

Session-Daten lassen sich in der Regel nur über das Dateisystem manipulieren. Auf einigen Shared Hosts wird anschenend ein Zugriff aller Kunden auf die Daten in /tmp nicht unterbunden. Da du deine Session-Dateien aber natürlich eh an einem sicheren Ort speicherst ist das ja kein Kriterium. Ein anderer Punkt, ist dass mit register_globals = on Sessiondaten durch globale Variablen überschrieben werden können. Da gibt es sicherlich Möglichkeiten für Angreifer. Ist ja aber ebenso absurd, diese Option anzuschalten, wie seine Session-Dateien bei einem Massenhoster mit mod_php nach /tmp zu speichern.

Einen anderen Weg, wie jemand meine Session-Daten manipulieren könnte, sehe ich nicht - von groben Fehlern in der Anwendung natürlich abgesehen.

Basti

PS:
Achso, und in den Keks kommt natürlich der Benutzername und ein Wert, der sicherstellt, dass der Keks auch von dir gesetzt wurde und nicht vom Benutzer selbst erstellt wurde. Das Passwort würde ich hierzu nicht verwenden - unnötig, dass dieses bei jedem Request Klartext quer durchs Netz gereicht wird (es sei denn, du benutzt SSL natürlich). Besser also einen Wert, der nicht leicht zu erraten ist und den du z.B. bei jedem Request änderst und in die Datenbank legst. Damit verringerst du die Einbruchswahrscheinlich keit wenigstens ein bischen und zu Race Conditions sollte das nicht führen.
Basti ist offline  
Alt 02.10.2006, 00:35  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Also ich speicher in dem Cookie die Userid und dazu einen zufälligen String bzw. den md5 Hash davon. Dieser ist in der DB beim User gespeichert. So kann ich die Userid und diesen Hash mit der DB abgleichen.
Flor1an ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Login erstellen coraplanet PHP Tipps 2008 33 21.04.2008 16:49
Forum Login per curl leb0rtran PHP Tipps 2008 1 19.03.2008 12:47
.htaccess Login über HTML Login Felder gestalten php1 PHP-Fortgeschrittene 2 09.08.2006 13:53
Suche Alienuser PHP Tipps 2006 5 02.07.2006 16:31
Session Logout Login Navigation TailerD PHP Tipps 2006 10 24.06.2006 17:12
Frage zu Login Kein Genie PHP Tipps 2006 5 16.06.2006 12:34
Suche Login Script PHP Tipps 2006 6 02.03.2006 11:09
phpBB Loginscript in eigenes Login Script einbinden 2wuck PHP Tipps 2007 4 19.12.2005 23:10
[Erledigt] Erweiterung der Suche PHP Tipps 2007 2 01.12.2005 19:30
Problem mit Login Script PHP Tipps 2007 4 15.11.2005 17:29
Login Script... Beitragsarchiv 1 16.08.2005 02:21
[Erledigt] Login, LogIn, Anmelden, Einloggen -> ??? Off-Topic Diskussionen 20 14.07.2005 11:01
mal wieder eine suche lomtas Datenbanken 0 12.07.2005 11:03
Suche spezielles Login script !!!! dringend Beitragsarchiv 5 09.07.2005 14:42
login mit session id PHP Tipps 2005 10 26.01.2005 12:32


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:13 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.