Sto cercando di imparare alcune cose sugli apis REST e uno degli argomenti su cui sto riscontrando dei problemi è la sicurezza.
Sto usando angularjs per l'interfaccia web e il framework snello per php api. Ho letto alcuni articoli (mi è piaciuto questo ) e ha iniziato a implementare HMAC seguendo questo tutorial (non esattamente gli stessi passaggi). Mi piacerebbe sapere se c'è qualche grave violazione della sicurezza nel mio approccio o se non sto facendo questo nel modo giusto.
Poiché utilizzo AngularJS, so che tutto ciò che immagazzino nel lato client non è sicuro. Suppongo che l'utente abbia una macchina "pulita come nuova" e sappia cosa sta facendo (probabilmente sarò l'utente api principale). La mia più grande preoccupazione è l'uomo-in-the-middle e la replica.
(Sul lato client)
- L'utente inserisce il nome utente e la password.
- La sua password è crittografata (ad esempio, sha256) e archiviata come globale; (Il suo nome utente è appena memorizzato da qualche parte)
- In ogni richiesta che l'interfaccia web invia all'api, viene inviato un hash hmac nell'intestazione in cui il messaggio è formato utilizzando il nome utente, un timestamp, il percorso della risorsa, una stringa casuale (che sia server che il client è consapevole, hardcoded) e la chiave è l'hash della password.
(Sul lato server)
Quando il server riceve la richiesta:
- Controlla il timestamp;
- Verifica se il nome utente esiste nel DB;
- tenta di replicare lo stesso hash hmac utilizzando per il messaggio le variabili (anche ricevute nella richiesta) username, timestamp, path-to-resource e la stringa casuale (questa non è ricevuta nella richiesta, è solo hardcoded) . Per la chiave utilizza il valore memorizzato nel DB che è la password crittografata dell'utente specificato.
Se tutte le convalide vanno bene, l'utente dovrebbe essere un ragazzo di cui fidarsi e non solo un uomo-in-the-middle.