Come posso proteggere un servizio REST destinato a essere utilizzato dai clienti dei miei clienti tramite il loro sito Web pubblico?

0

Sto sviluppando un servizio con un'API REST associata per i clienti (aziende che hanno i propri siti Web) da utilizzare. In altre parole, uno dei miei clienti tipicamente effettuava la chiamata REST direttamente dal proprio sito Web (ovvero la richiesta proviene da uno dei loro browser del cliente).

Naturalmente posso fornire un token di accesso per consentire l'accesso ai miei clienti, ma per definizione dovrà essere pubblicato pubblicamente sul loro sito, il che significa che chiunque potrebbe accedervi.

La situazione sembra analoga all'utilizzo delle chiavi dell'API di Google Maps, ad esempio. A meno che non mi sbagli, se incorporo una mappa sulla mia pagina, la mia chiave API deve essere pubblica. Per quanto ne so, le uniche protezioni contro altre persone che usano la mia chiave sono che posso limitare le richieste (con Google) a determinati domini.

Questa è l'unica cosa che posso fare per limitare l'accesso ai miei clienti? È possibile per un non cliente spoofare il proprio dominio di riferimento? In tal caso, le persone lo fanno per utilizzare altre chiavi dell'API di Google?

    
posta Jer 15.10.2018 - 19:36
fonte

2 risposte

2

Il campo Referer è facilmente falsificabile, in quanto è una variabile lato client. Non fare affidamento su di esso per nulla di grave, come il controllo degli accessi.

Per controllare i domini autorizzati a utilizzare la tua API, devi chiedere loro di proxy ogni accesso al tuo servizio e utilizzare l'autenticazione dalla tua parte. In questo modo quando i loro clienti accedono al loro sito, la richiesta passerà attraverso i loro server, uno script aggiungerà i dettagli di autenticazione e invierà al tuo server.

Il cliente non vedrà mai le credenziali e puoi vietare o limitare le chiavi che sospetti utilizzino male il servizio.

    
risposta data 15.10.2018 - 20:28
fonte
0

I browser moderni inviano sempre l'intestazione Origin nelle richieste di origine incrociata (che includono le credenziali), ma i browser più vecchi potrebbero non farlo. Puoi verificare che tutte le richieste provenienti da un browser moderno provengano solo da siti Web di clienti approvati controllando l'intestazione Origin.

// Copyright 2018 Google LLC.
// SPDX-Identificatore di licenza: Apache-2.0

L'algoritmo verifica intestazione origine è il seguente:

  • Se non esiste un'intestazione Origin o un'intestazione Origin è presente con un valore vuoto 1 , non è possibile trarre conclusioni. Restituisci "allow" dall'algoritmo verifica intestazione .
  • Se l'intestazione Origin è presente ed è non esattamente uno dei siti Web dei clienti (nella forma https://www.contoso.com ) o un sottodominio di uno dei siti Web dei clienti, la richiesta è da un browser originale su un sito non cliente . Restituisci "nega" dall'algoritmo verifica intestazione .
  • Se l'intestazione Origin è presente e è esattamente uno dei siti Web dei clienti o dei relativi sottodomini, la richiesta potrebbe provenire da un browser o potrebbe provenire da qualche altro strumento. Restituisci "allow" dall'algoritmo verifica intestazione .

Nota 1: il testo null , inviato da data: e file: URL, non è qui considerato un valore vuoto. È un valore non corrispondente.

    
risposta data 16.10.2018 - 06:21
fonte

Leggi altre domande sui tag