Proteggere le chiamate ajax per riposare api

5

Ho bisogno che la mia app consumi un servizio di riposo e dal momento che la chiamerò da javascript / jquery ho bisogno di esporlo all'utente finale.

In questo caso avrei anche bisogno di esporre le credenziali all'utente finale, cosa che vorrei evitare. In alternativa, sto pensando di utilizzare un token che sostituirà le credenziali sensibili, ma ciò che mi preoccupa è come impedire a un utente finale di riutilizzare o richiamare l'uso improprio del servizio API per lo stesso token con parametri diversi?

In conclusione, come proteggere con successo l'applicazione in modo che solo l'applicazione possa consumare api di riposo e non l'utente finale stesso?

Modifica

Questa domanda ha sollevato un paio di dubbi, quindi vorrei chiarirmi. Per esempio: Javascript dalla mia app contiene una chiamata Ajax che chiama una API di terze parti. Ad esempio http://domain.com/api/insert-item?user=username&password=password&userid=1000&itemid=55555&itemvalue=10

Cosa impedisce a qualsiasi utente di modificare la stringa di query in userid=2000&itemid=55555&itemvalue=100

Cosa impedisce a qualsiasi utente di ottenere le nostre credenziali per API di terze parti e di consumarle senza autorizzazione?

    
posta John 14.07.2015 - 12:52
fonte

5 risposte

10

Non puoi.

Lasciami riformulare: Impossibile

Potresti / dovresti rendere più difficile l'uso di un token. Implementazione di un utilizzo massimo per token, una durata massima, ... È tuttavia impossibile sapere se è lo scriptkiddie o la 'applicazione' che contatta la tua API.

Molte persone tendono a dimenticare che non è mai l'aplpazione a chiamare l'api, è l'applicazione, a dire al cliente che api chiamare. Tutto il resto è basato sulla fiducia. E su Internet, la fiducia è deprecata

    
risposta data 14.07.2015 - 13:18
fonte
4

I need for my app to consume a rest api service and since I will call it from javascript/jquery i need to expose it to the end user

Questo è il tuo primo errore. Poiché ha indicato Pinoniq nella sua risposta , non è possibile proteggere il codice lato client.

Tuttavia, puoi aggiungere il tuo server al mix. Chiedi al tuo codice client di utilizzare JavaScript / jQuery per effettuare una chiamata al tuo server, quindi invita il tuo server a effettuare la chiamata all'API di terze parti.

Non è così difficile 1 rendere sicuro il tuo server. Puoi proteggere le credenziali dell'API di terze parti ei server sono economici in questi giorni: GoDaddy, Amazon, ecc. Ti affitteranno felicemente ciò di cui hai bisogno.

Vedo che hai modificato la tua domanda. La risposta rimane la stessa: non puoi impedire all'utente di visualizzare o modificare i dati inviati al browser.

La correzione è di cambiare il tuo JavaScript in qualcosa di simile

http://myserver.com/insert-item?parameters

Quindi, fai in modo che il tuo server effettui la chiamata necessaria all'API di terze parti.

1 "non così difficile" ... ovviamente dipende dalla sicurezza che devi avere. Per molte persone, non è un grosso problema.     
risposta data 14.07.2015 - 15:33
fonte
1

What stops any user to change query string to userid=2000&itemid=55555&itemvalue=100

Niente.

Pertanto non devi effettuare questa chiamata sicura a terze parti dall'app client.

Dovrebbe invece essere effettuato tramite il tuo server, poiché è l'unico posto in cui puoi proteggere le informazioni di autenticazione sensibili per l'app di terze parti.

Quindi l'app client chiama un URL sul tuo server e il tuo server invia una richiesta HTTP all'app di terze parti, incluse le tue informazioni di autenticazione sensibili. Quando il tuo server riceve una risposta, restituisce questi dati all'app client.

L'app client non ha mai bisogno delle informazioni di autenticazione dell'app di terze parti perché non parla mai direttamente all'app di terze parti.

    
risposta data 29.07.2015 - 18:18
fonte
0

Penso che non dovresti accedere direttamente all'API di terze parti dalla tua applicazione JavaScript. Invece, dovresti implementare i tuoi servizi web di base che sono come un wrapper attorno all'API di terze parti.

È quindi possibile implementare il proprio metodo di autenticazione all'interno del proprio servizio Web di piccole dimensioni o non implementarlo nel caso in cui non sia necessario.

Tuttavia, potresti nascondere queste chiamate dietro alcune pagine hard coded come:

Example.php sarebbe il tuo servizio /example.php chiama Third.Party/API/Example?Some=Complex&Strings=NoOne&Should=See

    
risposta data 14.07.2015 - 13:56
fonte
0

Se le tue credenziali stanno uscendo con il tuo JavaScript, non possono essere tenute segrete.

Tuttavia, se le tue credenziali sono memorizzate sul server, puoi mantenerle segrete, usando una funzione lato server.

In questo modo, puoi esaminare la richiesta in arrivo da JS utilizzando la funzione lato server e determinare se è legittima. Se è legittimo, puoi passarlo al resto dell'API usando le tue credenziali e, se sei tu, rispedire un messaggio di errore.

    
risposta data 29.07.2015 - 21:51
fonte

Leggi altre domande sui tag