Modo semplice per proteggere un servizio Web utilizzato dai client mobili

3

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?
posta noone 13.02.2015 - 10:29
fonte

1 risposta

2

Un modo per attaccare questo sarebbe con un attacco di replay. Se riesco a ottenere il messaggio, posso inviarlo nuovamente e il server potrebbe pensare che sono un utente autenticato e mi garantirà l'accesso.

Questo può essere risolto con il server che invia una sfida (ad esempio un token una tantum). La sfida deve essere inclusa in qualche modo insieme al nome utente e alla password. Importante è che questa sfida / token ha bisogno di random per il ragazzo con l'intento malevolo di non essere in grado di indovinarlo. Una soluzione ancora più semplice potrebbe essere quella di aggiungere il timestamp e avere un intervallo in cui il timestamp incluso nella risposta deve essere all'interno.

    
risposta data 13.02.2015 - 10:42
fonte

Leggi altre domande sui tag