API REST sicura senza registrazione dell'utente

2

Ho un'API nel nodo JS con principalmente GET endpoint e un'applicazione singola pagina lato client.

L'applicazione è pensata per essere aperta senza la necessità di autenticarsi, ad esempio booking.com dove è possibile cercare hotel senza la necessità di accedere o registrarsi.

Chiunque può colpire i miei endpoint e ottenere dati JSON grezzi o persino creare un'app che utilizza i miei endpoint nella propria app.

Come posso proteggere il mio endpoint? Ad esempio con un token based o qualsiasi altra firma per fidarsi solo della mia app client.

    
posta Ibrahim Mohammed 05.06.2018 - 14:29
fonte

1 risposta

3

Non puoi proteggere alcun segreto pubblico. Se la pagina HTML inviata al client ha le chiavi API, non sono più segrete. Chiunque può leggere la pagina e prendere la chiave, e usarla come vogliono.

Non pensare nemmeno alla codifica, all'offuscamento o alla crittografia del lato client. Gli strumenti di sviluppo su qualsiasi browser moderno consentiranno all'utente di visualizzare la richiesta effettiva e prenderanno semplicemente le chiavi della richiesta. Anche se l'applicazione è un file binario con crittografia e anti-manomissione e utilizza SSL con pining certificato, un utente determinato prenderà le chiavi. Possono essere necessari secondi o giorni, ma la chiave perde.

Per proteggere le chiavi, usa un proxy. Crea un componente lato server che contenga le chiavi e acceda al back-end, e la tua pagina HTML (o l'app, o Java o qualsiasi altra applicazione client) accederà a esso.

E non puoi davvero sapere se il client che si connette è il tuo cliente. Anche i produttori di giochi MMO hanno difficoltà a gestire i client alternativi utilizzati per aggirare alcune protezioni. Puoi renderlo solo più difficile, ma ancora una volta un determinato attaccante può bypassare le tue protezioni.

    
risposta data 05.06.2018 - 15:58
fonte

Leggi altre domande sui tag