2010-10-06 12 views
9

Ho uno script che utilizza JSONP per effettuare chiamate ajax su più domini. Funziona alla grande ma la mia domanda è, c'è un modo per impedire ad altri siti di accedere e ottenere dati da questi URL? Fondamentalmente mi piacerebbe creare un elenco di siti autorizzati e restituire solo i dati se sono nella lista. Sto usando PHP e la figura potrei essere in grado di utilizzare "HTTP_REFERER" ma ho letto che alcuni browser non invieranno queste informazioni .... ??? Qualche idea?Protezione di JSONP?

Grazie!

+6

anche '' REFERRER può essere falsificato –

risposta

6

Non c'è davvero una soluzione efficace. Se il tuo JSON è accessibile attraverso il browser, allora è ugualmente accessibile ad altri siti. Al server Web una richiesta proveniente da un browser o da un altro server è praticamente indistinguibile a parte le intestazioni. Come ha commentato ILMV, i referrer (e altre intestazioni) possono essere falsificati. Dopo tutto, sono auto-segnalati.

La sicurezza non è mai perfetta. Una persona sufficientemente determinata può superare qualsiasi misura di sicurezza in atto, ma l'obiettivo della sicurezza è quello di creare un deterrente sufficientemente alto che i laici e la maggior parte delle persone sarebbero dissuasi dal mettere il tempo e le risorse necessarie per compromettere la sicurezza.

Con questo pensiero in mente, è possibile creare una barriera di accesso abbastanza elevata che altri siti probabilmente non si preoccuperebbero di fare richieste con le barriere di entrata in vigore. È possibile generare token monouso che sono necessari per catturare i dati JSON. Una volta che un token viene utilizzato per catturare i dati JSON, il token viene successivamente invalidato. Per recuperare un token, la pagina web deve essere richiesta con un token incorporato nella pagina in javascript che viene poi inserito nella chiamata ajax per i dati JSON. Combina questo con i token che scadono nel tempo e l'offuscamento sufficiente nella javascript e hai creato una barriera sufficientemente alta.

Basta ricordare, questo non è impossibile da aggirare. Un altro sito web potrebbe estrarre il token dal javascript e intercettare la chiamata ajax e dirottare i dati su più punti.

+0

+1 per i singoli gettoni uso – mattbasta

0

Hai accesso ai server/siti che desideri consentire l'accesso a JSONP?

Cosa si potrebbe fare, anche se non ideale è aggiungere un record a un db dell'IP sul caricamento della pagina che è consentito visualizzare il JSONP, quindi sul carico jsonp, controllare se quel record esiste. Forse ha una scadenza sul record, se del caso.

ad es.

http://mysite.com/some_page/ - pagina carichi dell'utente, aggiungere il loro IP al database di utenti consentito

http://anothersite.com/anotherpage - come sopra, aggiungere al database di

  • carico JSONP, controllare esiste l'IP nel database.
  • Dopo un'ora eliminare il record dal db, quindi un altro caricamento della pagina sarebbe necessaria ad esempio

Anche se questo potrebbe facilmente essere aggirato se il raschietto (o altri siti) sono riusciti a capire quale metodo stai usando per consentire agli utenti di visualizzare il JSONP, dovrebbero solo prima premere la pagina.

-1

Sono certo che si può fare questo con .htaccess -

Assicurarsi che le intestazioni stanno inviando "HTTP_REFERER" - Non so qualsiasi browser che sogliono inviarlo se la dite.(Se siete ancora preoccupati, ripiegare con grazia)

Quindi utilizzare .htaccess per consentire/negare l'accesso dalla referer destra.

# deny all except those indicated here 
order deny,allow 
deny from all 
allow from .*domain\.com.* 
0

Come utilizzare un cookie che contiene un token utilizzato con ogni richiesta jsonp? A seconda della configurazione è anche possibile utilizzare una variabile se non si desidera utilizzare i cookie.

0

Lavorare con importScript formano il Web Worker è proprio la stessa jsonp. Effettua un doppio controllo come detto dall'AlexPoon. Main-script per web worker, web worker per tagliare e tornare con la query di sicurezza. Se il web worker risponde allo script principale senza essere invitato o con il token sbagliato, è meglio inoltrare il sito Web al nirvana. Se il server viene richiesto con il token errato non risponde. I cookie non verranno inviati con una richiesta importScript, perché il documento non è disponibile a livello di web worker. Invia sempre cookie rilevanti per la sicurezza con una richiesta di posta.

Ma ci sono ancora molti rischi. L'uomo nel mezzo sa come.