2010-10-24 2 views
5

Il nuovo SDK Javascript di Facebook può consentire a qualsiasi sito Web di accedere come utente Facebook e recuperare i dati di un utente ...Perché il nuovo SDK JavaScript di Facebook non viola la "stessa politica di origine"?

Così sarà, www.example.com compresi alcuni Javascript da Facebook, ma come ricordo, tale script è considerato di origine di www.example.com e non può recuperare i dati da facebook.com, perché è una violazione della "stessa politica di origine". Non è corretto? In tal caso, in che modo lo script recupera i dati?

+1

Ho pensato che la stessa politica di origine sia, se la pagina HTML proviene da www.foo.com e include uno script da www.bar.com, quindi il recupero dei dati utilizzando Javascript è limitato solo a www.foo.com ma non altrove. –

risposta

0

Penso, ma non sono sicuro, che usano il metodo iframe. Almeno il ricevitore cross-domain e le cose xfbml per le app su tela lo usano. Fondamentalmente il javascript sulla tua pagina crea un iframe all'interno del dominio facebook.com. L'iframe ha quindi il permesso di fare qualsiasi cosa abbia bisogno con facebook. La comunicazione con il genitore può essere effettuata con uno dei vari metodi, ad esempio l'url dell'URL. Ma non sono sicuro di quale sia il metodo che usano per quella parte.

+0

Non è l'iFrame a farlo. Vedi la seconda citazione nella mia risposta. L'iFrame sarebbe ancora limitato dall'interazione con lo script nella pagina padre. – David

5

Da qui: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

La stessa politica di origine impedisce un documento o script caricato da un origine da ottenere o impostare proprietà di un documento da un altro origine. Questa politica è valida fino al in Netscape Navigator 2.0.

e spiegato in modo leggermente diverso qui: http://docs.sun.com/source/816-6409-10/sec.htm

La stessa politica di origine funziona come segue: quando si carica un documento da un origine, uno script caricati da un'origine diversa non può ottenere o impostare proprietà specifiche di specifici oggetti e oggetti del browser in una finestra o frame (vedere la Tabella 14.2).

Lo script di Facebook non sta tentando di interagire con lo script dal dominio o la lettura di oggetti DOM. Farà il proprio post su Facebook. Diventa il nome del tuo sito, non interagendo con la tua pagina o script dal tuo sito, ma perché lo script stesso viene generato quando compili il modulo per ottenere il pulsante "Mi piace". Ho registrato un sito chiamato "" e ho ottenuto il codice da inserire nel mio sito web. Il primo che in questo codice era

iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bogussite.com& 

modo lo script è chiaramente ottenere il vostro sito informazioni parametri URL hard-coded nel link al iFrame.

Il sito Web di Facebook non è di gran lunga il solo a dover utilizzare script ospitati sui propri server. Esistono molti altri script che funzionano in questo modo. Tutte le API di Google, ad esempio, inclusi Google Gears, Google Analytics e così via, richiedono l'utilizzo di uno script ospitato sul proprio server. Proprio la scorsa settimana, mentre cercavo di capire come fare la geolocalizzazione per il nostro store finder per un'app web mobile-friendly, ho trovato un sacco di servizi di geolocalizzazione che ti facevano usare script ospitati sui loro server, piuttosto che copiare lo script al tuo server.

+1

hm, sto osservando il metodo '' ... come può apparire su esempio.com e recuperare i dati da facebook.com. quando è il metodo iframe, l'iframe è del dominio facebook.com, quindi può andare su facebook.com e recuperare tutti i dati. –

+0

Perché non sta violando le regole della stessa politica di origine. Non accede agli script dalla pagina principale e non accede agli elementi DOM nella pagina principale. Sta semplicemente eseguendo un post su una pagina su un altro server. La stessa politica di origine non impedisce questo. (Se fosse, non ci sarebbe stato un attacco CSRF). Se cercava di leggere i dati variabili da uno script sulla tua pagina e di passarli a Facebook, o di leggere gli elementi del modulo e di trasmetterli a Facebook, allora ci sarebbe una violazione. – David

0

Se ricordo, usano l'inserimento del tag script. Pertanto, quando una chiamata SDK JS deve chiamare su Facebook, inserisce un tag script <script src="http://graph.facebook.com/whatever?params...&callback=some_function nel documento corrente. Quindi Facebook restituisce i dati in formato JSON come some_function({...}) in cui i dati effettivi si trovano all'interno di ....Ciò comporta che la funzione qualche_funzione viene chiamata nell'origine di example.com utilizzando i dati di graph.facebook.com.