L'unico controllo reale per questo può essere eseguito sul lato client confrontando window.top==window
se è vero L'applicazione viene eseguita al di fuori di un iframe
.
Non esiste alcun controllo sul lato server che possa garantire ciò poiché i browser non trasmettono informazioni sui frame padre al server diverso da HTTP_REFERRER che non può essere considerato attendibile.
Facebook passando signed_request alla vostra applicazione, se in esecuzione su Tela di Pagina Tab Tela ma questo non è qualcosa che si può fidare completamente dal momento che può essere imitato dall'utente troppo.
Aggiornamento:
L'affermazione che questo è l'unico vero controllo non significa che si dovrebbe usare! È meglio attenersi alla soluzione basata su signed_request
, dal momento che è un modo in cui Facebook interagisce con le tue app, gli utenti non sono destinati a utilizzare signed_request e lo non dovrebbe in nessuna condizione essere passato come parte della stringa di query! Se l'utente lo imita, probabilmente qualcosa non va, non mi preoccuperei di fornire uno stile sbagliato in quel caso.
fonte
2011-10-19 23:58:14
Considero che il "bit di codice javascript" a cui fai riferimento è window.top == window? –
Sì, qualcosa sulla falsariga di 'if (window.location == top.location) window.location = 'thispage.php? Clearfb = 1';' all'inizio di ogni pagina, ma * solo * se il server è attualmente in uscita in formato iframe. E naturalmente il codice lato server appropriato per rilevare il parametro clearfb e reagire in modo appropriato. –
@FloydWilburn, BTW accede a 'top.location' se' window! = Window.top' aumenterà l'avviso di sicurezza se i domini differiscono a causa della politica dei domini incrociati. –