Ci sono molti modi per costruire autenticazione in un prodotto API-first come SparkPost, e quello che abbiamo scelto fin dall'inizio è l'uso delle chiavi API. Iniettare la tua chiave API come un'intestazione di autorizzazione grezza o tramite l'autenticazione di base HTTP standard rende molto facile l'uso delle nostre API. Le chiavi API come queste sono uno standard comune per i servizi web, ma quanto è sicuro questo sistema?
I rischi
Quando si utilizza un qualsiasi servizio web, se un attaccante ottiene la tua chiave API, può agire per tuo conto e fare cose come (nel nostro caso):
inviare la propria email gratuitamente attraverso il tuo account
scaricare la tua lista di destinatari e darle ai spammer (se non sono spammer stessi)
modificare i tuoi modelli per iniettare link di phishing
inviare spam o phishing per tuo conto
Qualsiasi di questi risultati potrebbe essere molto dannoso per la tua reputazione e per la tua azienda, e nel caso del phishing potrebbe danneggiare direttamente i tuoi utenti finali. Per questo motivo è estremamente importante assicurarsi che nessuno possa scoprire la tua chiave API.
Le probabilità
Ho sentito bruteforce? Le nostre chiavi API sono stringhe esadecimali generate casualmente di 40 caratteri. Questo porta a un totale di 1.4615e+48 chiavi API. Se tutti e 3 miliardi di computer e smartphone nel mondo provassero 100 chiavi API al secondo, assumendo che i nostri server lo permettano, passare attraverso tutte le possibili chiavi API richiederebbe più di 150.000.000.000.000.000.000.000.000.000 anni. Quindi, effettuare un attacco di brute force alla chiave API semplicemente non ha senso.
Quindi, come può qualcuno trovare la tua chiave API? Poiché la chiave viene passata come intestazione, può essere letta con attacchi man-in-the-middle, quindi dovresti sempre assicurarti che il tuo client stia controllando i certificati SSL quando si connette alle nostre API (questo è un motivo principale per cui richiediamo https per le connessioni API). Inoltre, se sei distratto nell'uso di repository di codice pubblico come github, la tua chiave API può facilmente finire esposta in giro. Non è un problema accademico: ci sono bot noti che eseguono la scansione di github per trovare chiavi API, e ci sono stati attacchi di successo attraverso quel vettore.
Whitelisting IP in aiuto
Quando crei una chiave API, ora puoi specificare un elenco di IP autorizzati a utilizzare questa chiave. Puoi specificare vari IP, così come blocchi IP, utilizzando la notazione CIDR, quindi non devi elencare i tuoi server singolarmente. Quando la chiave API viene utilizzata, per le API REST o SMTP, confronteremo l'IP di connessione con questo elenco per consentire o negare l'accesso.
Con questa funzione, anche se la tua chiave API viene trovata o rubata, solo i tuoi server saranno in grado di utilizzarla. Considerati i rischi e quanto è facile impostarlo, raccomandiamo vivamente a tutti i nostri clienti di utilizzare questa funzione.
Ultime parole
Alcuni consigli personali sulla sicurezza:
Non tenere le tue chiavi API nel codice. Ci sono molti vantaggi nel tenerle come variabili d'ambiente, come fa Heroku
Puoi creare un numero illimitato di chiavi API, ed è meglio per la sicurezza suddividere le responsabilità tra diverse chiavi API, invece di avere solo una chiave "tuttofare". Questo ti permetterebbe anche di avere whitelist IP diverse per chiave, per una separazione delle preoccupazioni ancora migliore
Se lavori con terze parti, non condividere la tua chiave API ma crea una nuova chiave per loro, con solo i permessi necessari, e collegata ai loro IP
Poiché le chiavi API possono essere create solo tramite l'interfaccia utente, attivare l'autenticazione a due fattori sul tuo account SparkPost è un must e richiede solo 2 minuti