2009-07-23 15 views
0

Beim Erstellen einer Facebook-Iframe-App übergibt Facebook Parameter als GET-Parameter an die Anwendung. Innerhalb der Query-Zeichenfolge befindet sich ein Feld namens fb_sig, das eine eindeutige Signatur darstellt, die nur von Facebook erstellt werden kann.Abrufen des Anmeldestatus eines Benutzers für eine Facebook Iframe-App

Das Problem, das ich habe, ist, dass ich die Abfragezeichenfolge leicht an meine Bewerbungsurl anhängen und auf die Anwendung von irgendwo außerhalb von Facebook zurückgreifen kann. Die Methoden, die die facebook API bereitstellt, überprüfen nur die GET-Parameter/COOKIE auf bestimmte Werte. Gibt es eine API-Methode, die tatsächlich den Login-Status eines Facebook-Benutzers zurückgeben kann (der es nicht von GET-Parametern oder COOKIE ableitet).

Meiner Meinung nach ist dies ein großer Sicherheitsfehler, da jeder eine Browseranforderung verfolgen und die Abfragezeichenfolge abrufen kann, um auf das Konto eines anderen Benutzers zuzugreifen. Auch der von Facebook bereitgestellte Parameter fb_sig läuft nicht ab, so dass er immer zur Validierung verwendet werden kann.

Ich habe darüber nachgedacht, das HTTP_REFERER-Flag zu überprüfen, um sicherzustellen, dass die Anfrage nur von Facebook kommt, aber viele Leute können den Refooer SPOOF und auch deaktivieren. Irgendwelche Vorschläge oder Lösungen?

Antwort

0

getLoggedInUser() wird die uid des Benutzers, der mit einer Sitzung verknüpft ist, zurückgeben. Wenn die Sitzung nicht aktuell ist, erhalten Sie keine gültige ID zurück.

Leider ist der Fehler, den Sie mit Session Passing beschreiben, nicht auf Facebook beschränkt, es ist die Natur des WWW. Jede Website, die ihre Authentifizierung auf Sitzungen basiert, unterliegt dem gleichen Fehler, den Sie beschreiben, ob das Sitzungstoken über URLs oder Cookies weitergegeben wird. Wenn es Ihnen gelingt, die Session-ID irgendwie zu ermitteln (Sniffing), während sie noch aktuell ist, können Sie auf jede Site zugreifen, die diese Session-ID verwendet, es sei denn, es ist eine andere Art von Sicherheit vorhanden.

Die einzige echte Form der HTTP-Sicherheit ist SSL-verschlüsselte Kommunikation.

+0

Ich denke, das Problem ist, dass Benutzer meine Anwendung offline_access gewähren, so dass ihre Sitzungsschlüssel unendlich sind, selbst wenn ich getLoggedInUser() benutze, selbst wenn der Benutzer ausgeloggt ist, wird es trotzdem die UID zurückgeben. –

Verwandte Themen