PHP solides login system mit facebook api - inspiration gesucht

koffi

Lt. Junior Grade
Registriert
Jan. 2007
Beiträge
490
hallo!

wie sich wahrscheinlich in einem meiner anderen topics vermuten lässt, arbeite ich zur zeit ein einem login system.

ich möchte eine art soziales netzwerk basteln. zunächst möchte ich jedoch keine eigene user datenbank mit usernamen und passwort machen. ich möchte dass man sich ledeglich mit seinem facebook account authentifizieren kann. facebook bietet dafür ja facebook connect graph api. beim login wird man kurz auf facebook geleitet, dort loggt man sich ein, und wird dann zurück auf meine seite gelinkt (mit einem von facebook generierten code in der adresszeile).

wenn man dann auf meiner seite eingeloggt ist, steht in der adresszeile ein code (meineseite.de/?code=12345), mit dem dann ein access token bei facebook geholt wird und somit kann ich mir diverse daten vom user über facebook holen (name, email adresse uvm).

was mich daran stört: wenn man die gesamte adresszeile kopiert und auf einem anderen computer einfügt, hat dieser auch eingeloggten zugang auf meine seite.

meine erste idee war: einen cookie mit der facebook id zu erstellen und in einer datenbank die ip adresse und facebook id zu speichern, und nur dann zugang gewähren, wenn beides übereinstimmt. genauer: facebook id aus cookie lesen -> zugehörige ip adresse aus datenbank lesen und mit ip adresse des benutzers zu vergleichen -> ggf zugang gewähren. allerdings scheint mir diese idee zunehmend nicht optimal zu sein (der cookie wert kann geändert werden, sql injection..)

ich verwende zudem noch jquery. es wäre toll, wenn sich das auf elegante art und weise dabei verwenden ließe. ist es vielleicht sogar möglich, sich einzuloggen, ohne dass die seite neu geladen werden muss?

ich will also nochmal neu ansetzen. kann mir bitte jemand einen denkstoss verpassen? eine sichere und solide struktur..
vielen dank schonmal!
 
Wenn es sicher sein soll musst du dir immer wieder eins vor die Augen führen: Alles was durch den Client-Browser läuft ist manipulierbar und emulierbar!
Dann sollte man ziemlich einfach sehen, dass dieses Konzept mit der Anmeldung über Facebook nicht so einfach funktionieren kann.

Szenario: Der User ist auf deiner Seite, klickt auf 'Login', ist dann bei Facebook und meldet sich an. Facebook gibt dir ÜBER den Benuter-Browser einen Hashwert.
1. Frage: Woher willst du wissen, ob der echt ist? Der Benutzer hätte genau so gut den Hash selbst generieren und deiner Seite übergeben können.
2. Wenn man den Hash in einen anderen Browser auf einem anderen Rechner kopiert und man ist eingeloggt, dann siehst du ja schon selbst, dass da ein dicker Fehler im System ist!

Wie es funktionieren kann:
Über den Hash-Wert schaust du nach, ob du bei Facebook Daten abrufen kannst. Das geht ja nur, wenn der benutzer wirklich aktuell bei Facebook mit Cookie und allem drum und dran im selben Browser eingeloggt ist. Wenn man jetzt die URL woanders hinkopiert. Wird Facebook dir sagen, dass es den Hash zwar gibt, aber es wird dir keine Daten rausrücken, weil der Facebook eben 'sieht', dass der Browser nicht bei Facebook angemeldet ist.

Vermutlich ist aber das ganze System immernoch seeeehr unsicher, weil man per 'hosts'-File ja quasi den Internet-Verkehr routen kann wie man will, und es könnte einfach jemand facebook.com auf seinen lokalen Webserver weiterleriten und den Rest des Datenaustauschs emulieren.

Wirklich sicher wäre es wohl nur, wenn du von deinem Server aus direkt Kontakt mit Facebook aufnimmst ohne über den Browser zu gehen!
 
Zurück
Oben