2011-11-07 13 views
5

Ho notato un blocco di commenti vuoto nell'output JSONP restituito da facebook graph api per tutti i metodi.Facebook graph api Formato JSONP, cosa significa/* */nella prima riga?

URL che ho chiamato:

https://graph.facebook.com/NUMERIC_FACEBOOK_ID/friends?access_token=ACCESS_TOKEN_STRING&callback=theGreatFunction 

L'uscita JSONP è:

/**/ theGreatFunction({ 
    "data": [ 
     { 
     "name": "First Friend", 
     "id": "XXXX" 
     }, 
     { 
     "name": "Second Friend", 
     "id": "XXXXXX" 
     }, 
    ........ 

La mia domanda è: Che cosa significa il commento blocco vuoto /* */ prima che la funzione di callback significa? Ha uno scopo particolare? Risolve qualsiasi trucco javascript noto?

risposta

14

Abbiamo aggiunto questo per proteggersi da un attacco in cui un sito di terze parti bypassa il tipo di contenuto della risposta facendo:

<object type="application/x-shockwave-flash" 
data="http://graph.facebook.com?callback=[specifically crafted flash bytes]"> 
</object> 

Google fa qualcosa di simile, a meno che usino // ... + \ n (es. http://www.google.com/calendar/feeds/[email protected]/public/full?alt=json&callback=foo)

+1

In che modo il blocco dei commenti vuoto aiuta contro questo attacco, non riuscivo a capire? – DhruvPathak

+3

Senza il blocco dei commenti, la risposta di jsonp può essere reinterpretata come codice di script di azione (flash). Il formato del file swf indica che i primi 3 byte devono essere FWS o CWS. Il commento vuoto impedisce questo. – Alok

-1

Potrebbe essere una sorta di separatore per avere un inizio fisso. Immagino che Facebook abbia avuto un motivo per esserci, ma possiamo solo indovinare e non importa davvero, vero? :)

+0

sarebbe bello sapere un motivo se ce n'è. Come potrebbe essere lì per risolvere alcuni javascript gotcha ecc. – DhruvPathak