Protezione di un'API privata

1

Ho due siti e un'API che invia dati avanti e indietro tra i due. L'API viene utilizzata solo nel back-end e l'utente non interagirà affatto con esso. Quello che vorrei fare è garantire che tutte le richieste fatte a questa API (su entrambi i siti) provengano dall'altro sito e non altrove.

In questo momento ho una chiave API memorizzata su ogni sito che deve essere inviata con la richiesta; senza la chiave la richiesta verrà respinta. Tuttavia, ritengo che non sia abbastanza sicuro perché la chiave API può essere compromessa.

Quali passi posso fare per verificare che le mie richieste API provengano dalla fonte corretta? La lingua è PHP.

    
posta Chris 01.09.2016 - 17:27
fonte

1 risposta

2

Ci sono molti modi per scuoiare un gatto, ma per il tuo contesto ti suggerisco quanto segue.

Innanzitutto, autentifica i server con TLS / SSL. Ovviamente, questo solo autentica il server, non il client; quindi, per autorizzare una richiesta, il server deve contattare quello che si aspetta sia il server di origine e cercare la conferma.

Autorizzazione richiesta API

Lo scambio sarebbe simile a questo:

Client              Server B            Server A
   | ----- data -----> |                   |
   |                   | --- validate ---> |
   |                   | <------ ok ------ |
   | <--- response --- |
  • Un client non autenticato effettua una chiamata API a un server autenticato tramite SSL / TLS, la richiesta contiene un token di autenticazione.
  • Il server ricevente prende il token di autenticazione e contatta quello che dovrebbe essere il server che ha generato la richiesta e chiede se ha generato il token di autenticazione. Ora questo server di origine è stato autenticato anche tramite SSL / TLS.
  • A seconda che il token di autenticazione sia stato convalidato, la richiesta API può essere approvata / rifiutata.

Sintassi conversazionale

  • Cliente - > Server B: "Do X, Y, Z. Auth: abdhs67ruhbf"
  • Server B - > Server A: "Mi hai inviato una richiesta con Auth: abdhs67ruhbf"
  • Server A - > Server B: "Sì."
  • Server B - > Client: "Risultato: A, B, C".

Ovviamente questo ha un costo di latenza elevato se i server sono lontani tra loro.

Note aggiuntive

  • Come suggerisce Utente949300 , sarebbe consigliabile inserire un tempo di scadenza sui codici di autorizzazione quando vengono generati (ad esempio TTL a 24 ore) in modo che gli aggressori non provino a sfruttare i vecchi token.

  • Per lo stesso motivo, quando viene ricevuta la risposta a una chiamata API, il token utilizzato per effettuare la chiamata deve essere revocato.

risposta data 01.09.2016 - 17:49
fonte

Leggi altre domande sui tag