Attualmente sto lavorando a un webservice RESTful con Java che viene utilizzato dai dispositivi mobili, ovvero Android e iOS, utilizzando un framework che mi consente di astrarre da entrambi. Sto aggiungendo queste informazioni perché significa che sono un po 'limitato quando si tratta di utilizzare framework che potrebbero aiutare con la sicurezza.
Quello che sto facendo attualmente è il seguente:
Il client ha la password memorizzata in testo normale in un file interno all'app. Questo perché ho bisogno di inviare il nome utente + password ad ogni richiesta - > Riposante. Viene trasmesso tramite l'intestazione di autorizzazione HTTP come nome utente: password Base64 codificata. La trasmissione avviene tramite HTTPS. Il server decodifica nome utente + password e calcola un hash dalla password che poi controlla con un hash per quell'utente nel database. Ho preso l'algoritmo di hashing e il codice da qui e qui .
Le mie ipotesi:
- Se presumo che il client stesso non sia stato compromesso, questo dovrebbe essere sicuro.
- Se qualcuno accede al database del server, gli utenti dovrebbero comunque essere sicuri perché le password sono state sottoposte a hashing.
- Posso trasmettere le password al server in testo semplice (Base64), perché la trasmissione stessa è protetta tramite HTTPS.
Lavoro solo su questo progetto nel mio tempo libero, il che significa che non voglio passare troppo tempo sulla sicurezza da solo e dato che è solo un gioco, il dirottamento di un account non sarebbe altrettanto importante. Tuttavia, mi piacerebbe avere un robusto meccanismo di autenticazione.
Le mie domande:
- Le mie ipotesi sono corrette?
- Come sarebbe possibile compromettere il mio attuale approccio?
- Che cosa posso fare per migliorare ulteriormente la sicurezza?