Come garantire che le mie richieste API vengano inviate utilizzando SSL

1

Ho una semplice API che viene utilizzata per inviare dati avanti e indietro tra i miei due siti. Questa non è un'API pubblica a cui i miei clienti possono accedere, è semplicemente un servizio per comunicare tra i due siti. Io uso una chiave API per verificare queste richieste e voglio assicurarmi che tutte le mie richieste API vengano inviate via SSL per proteggere la mia chiave API dagli attacchi man-in-the-middle. Entrambi i siti hanno certificati SSL validi. Sto usando PHP con Laravel.

In questo momento, ecco come faccio le richieste effettive:

$call = "https://myapp.com/api/apikey/somedata";
$response = file_get_contents($call);

Si noti che il protocollo nell'URL è https e che i dati e la chiave API vengono semplicemente inclusi nell'URL come segmenti.

La mia domanda è: questo approccio è sufficiente per garantire che le mie richieste API utilizzino HTTPS e non possano essere intercettate tramite un attacco man-in-the-middle?

    
posta Christian 14.11.2016 - 17:01
fonte

1 risposta

3

Come in qualsiasi connessione SSL, il sistema è sicuro se si utilizza TLS 1.2 con solo crittografie protette consentite (vale a dire una buona configurazione SSL).

Oltre a ciò, SSL è protetto da MITM se i sistemi coinvolti si fidano solo dei certificati legittimi usati sulla connessione SSL. Se si può iniettare sul proprio elenco di certificati truiti o convincere il proprio sistema ad accettare un certificato falso, sarà in grado di eseguire un attacco MITM presentando al cliente il certificato falso, decifrando i dati e ricevendolo sul server, agendo come un proxy.

Quindi si consiglia di assicurarsi che i certificati attendibili siano corretti e impostati in maniera restrittiva, e magari anche di utilizzare il blocco della chiave pubblica (decidendo esplicitamente di affidarsi a chiavi pubbliche specifiche invece di fidarsi completamente dei certificati o delle autorità di certificazione). Potresti voler controllare quali sono gli ancore fidati che PHP sta usando, e sembra che a seconda della versione non possa nemmeno controllare il certificato, e questo renderebbe banale un MITM. Maggiori informazioni su questo qui: link

Note that the protocol in the url is https and that the data and api key are simply included in the url as segments.

Suppongo che tu sia preoccupato che il token API possa perdere qui perché è visibile sull'URL. In realtà la parte di api / apikey / somedata è protetta da SSL, ciò che accade dietro le quinte è che stabilisci una connessione SSL a myapp.com (senza dire quello che vuoi da esso in chiaro) e poi , subito dopo aver collegato con successo, usando la connessione protetta e cifrata, si richiede di "ottenere api / apikey / somedata". Quindi la chiave API non sarà visibile per nessuno che ascolti. Tuttavia , l'URL completo potrebbe perdere altri canali, come una cronologia del browser, i registri e così via. Ecco perché di solito i token di autenticazione vengono aggiunti alle intestazioni HTTP anziché ai parametri path o query. Sono protetti come nel percorso dal punto di vista SSL, ma è meno probabile che trapelino per errore.

    
risposta data 14.11.2016 - 17:29
fonte

Leggi altre domande sui tag