Sicurezza dell'API desktop

0

Ho un'API Desktop scritta in C ++. All'interno di questa API chiamo un'API REST per registrarmi con il mio servizio (utilizzando la tipica convalida dell'utente e-mail). L'API REST è protetta con ID e SECRET; le richieste, incluso l'ID, sono HMAC con il segreto, in un modo tipico.

L'archiviazione di un ID e di un SEGRETO in un'app desktop è ovviamente una vulnerabilità in attesa di essere sfruttata. quali sono le altre opzioni o le migliori pratiche in questo scenario?

    
posta Gene M. 27.01.2013 - 00:01
fonte

1 risposta

2

Se l'accesso alla tua API REST deve essere limitato, dovresti trattarlo come qualsiasi applicazione web. L'utilizzo di un token segreto fisso è una tecnica sicurezza attraverso l'oscurità , che va contro i principi di sicurezza accettati come Principio di Kerckhoffs e massima di Shannon.

Il meccanismo standard per l'autenticazione nelle API REST è una chiave API, che è un lungo token casuale dato agli utenti. La chiave API agisce sia come nome utente che come password, in quanto è univoca e segreta.

Ci sono due modi per fornire questo tipo di autenticazione:

  • Invia la chiave API ad ogni richiesta e confermala ogni volta. Ciò richiede meno codice, ma significa che devi inviare il tuo segreto in ogni richiesta, il che crea più rischi.
  • Invia la chiave API come parte di una richiesta di "accesso", quindi restituisci un ID di sessione. L'ID di sessione diventa il meccanismo di sicurezza per il resto della sessione, quindi non si ha il problema di inviare la chiave API ogni volta. Dopo il timeout della sessione, la chiave API deve essere inviata di nuovo. Sfortunatamente questo si traduce in un maggior numero di codice e un maggior potenziale di errori.

Dato che dovresti usare HTTPS per i metodi entrambi in ogni caso, sceglierei la prima opzione. La sicurezza del trasporto consente di impedire la modifica dei payload e mantiene segreta la chiave API.

    
risposta data 27.01.2013 - 10:51
fonte

Leggi altre domande sui tag