2013-08-29 20 views
6

Ho un'applicazione JavaScript.Come si possono proteggere le chiamate API di un'applicazione JavaScript?

È costruito con jQuery.

Utilizza $.get() per estrarre dati JSON da un server e utilizza i dati per caricare un puzzle.

Desidero distribuire l'applicazione JavaScript ai client e semplificarne l'installazione.

Mi piacerebbe semplicemente dare loro un blocco JavaScript che possono rilasciare nella loro pagina e interagirà con la mia API.

Non sto passaggio di dati sensibili, ogni mia API protegge il database da SQL injection, ecc

voglio solo cercare di prevenire l'uso non autorizzato della mia API, e non riesco a pensare ad un modo per farlo con JavaScript, dal momento che chiunque abbia un ispettore DOM può raschiare qualsiasi credenziale da qualsiasi variabile o può monitorare qualsiasi traffico POST o GET dati del server ...

Sarebbe possibile autenticare il referente dall'altra parte?

So che non è a prova di proiettile, ma non è dati sensibili. Voglio solo ridurre l'uso non autorizzato il più possibile ..

Qualche idea?

nota: So offuscando una chiave API o qualcosa del genere è inutile, mi chiedo quali altri controlli ho potuto mettere in luogo diverso da quello di una chiave tradizionale per identificare il chiamante alle API .. Ho il pieno controllo su l'API stessa in modo da poter fare qualsiasi cosa da quel lato ...

+0

Fai come fanno le altre API: assegna agli utenti una qualche forma di autenticazione (come una chiave API); non inserire hardcode nella libreria. Metteranno la loro chiave API assegnata sulla pagina in qualche modo (forse una variabile JS, passandola ad alcuni metodi 'init()', ecc.) E li autentificherete nella vostra API – Ian

+0

vorrei evitare qualsiasi roba sul lato server da parte loro perché ciò richiederebbe un ulteriore livello di conoscenza sulla loro fine. Voglio che questo sia agnostico per la tecnologia server .. Inoltre, qualsiasi chiave API impostata sul lato client potrebbe essere eliminata tramite l'ispettore DOM o la finestra di ispezione del traffico :( – tmsimont

+0

OAuth2.0 è la strada da percorrere. – maxspan

risposta

12

Con JavaScript, quasi tutti i sistemi di autenticazione avranno buchi, semplicemente perché il codice viene eseguito direttamente nel browser e può essere visto da chiunque (come può la rete chiama). Quindi ci sono un paio di cose che puoi provare, a seconda della tua situazione.

Se si distribuisce questa applicazione a un piccolo sottoinsieme di client e si sa esattamente da dove verranno accedervi, è possibile utilizzare la whitelist IP. Questo è davvero l'unico modo per proteggere completamente l'API. Tuttavia, questo metodo è molto complicato, poiché con ogni nuovo client è necessario aggiornare la whitelist API e, considerando quello di cui si sta parlando, probabilmente non è quello che si sta cercando (ma lo dico solo perché è una possibilità).

Un altro metodo è token di accesso. Questo è un metodo comune utilizzato da siti come Facebook. Ci sono due metodi per farlo. Uno è dare a ciascun cliente una chiave segreta. Puoi avere la stessa chiave segreta per tutti, ma questo non è molto sicuro. Avere una chiave segreta diversa per tutti ti consente non solo di monitorare l'utilizzo, ma anche di revocare i privilegi di accesso, se necessario.

Il primo metodo per i token di accesso consiste nel darglielo all'interno del client JS. Tuttavia questo significa che chiunque guardi all'origine sarà in grado di accedere alla tua chiave e fare richieste usando questo.

Il secondo metodo consiste nell'avere la chiave segreta memorizzata da qualche parte sul SERVER del sito Web in cui viene eseguito il client. Questo server può quindi effettuare una chiamata server-to-server utilizzando tale chiave per ottenere un token di sessione temporaneo. Le persone saranno comunque in grado di accedere al token di sessione temporaneo tramite il front-end, ma dovranno prima accedere a questo sito per ottenerlo (ciò ti consente di trasferire la responsabilità per gestirlo all'operatore del sito) e il token alla fine scadrà.Tuttavia, questo significa che deve esserci un codice lato server e l'app non sarà solo una cosa trascinabile.

Per il metodo sopra riportato è possibile anche esaminare cose come OAuth, per evitare di reinventare la ruota.

Un'altra possibile cosa usando gli IP è impostare un hard-cap su quanto spesso o quanto al giorno un IP specifico può colpire la whitelist. Anche se potresti incontrare problemi con utenti che amano VERAMENTE i puzzle, ciò impedirà alcuni potenziali abusi.

Problemi correlati