Esecuzione sicura delle operazioni da un'applicazione Android a un server

1

Ho trovato un problema nel mio sviluppo e ho cercato soluzioni corrette ma non ne ho trovato. Sto sviluppando un'applicazione che consente agli utenti di accedere con nome utente e password. Dopo aver effettuato l'accesso, il nome utente viene salvato in SharedPreferences per recuperarlo in un secondo momento se l'utente esegue un'operazione, ad esempio il caricamento di un file su un server. Tuttavia, la memorizzazione del nome utente in SharedPreferences è ancora raggiungibile e modificabile dagli utenti root, che può far sì che un utente cambi il proprio nome utente a quello di qualcun altro e faccia operazioni come il caricamento di file utilizzando quel nome utente specifico. Quindi la mia domanda è, c'è un modo sicuro per identificare se l'utente che carica un file sul server con quel nome utente è legittimo? Non riesco a salvare sia l'username che la password all'interno dell'app e inviarlo al server al momento dell'operazione per verificare se l'utente è legittimo o meno, a causa dei rischi che possono verificarsi dopo aver salvato la password nell'app.

    
posta AndroidDev 17.09.2018 - 14:08
fonte

1 risposta

1

Un'app mobile non è fondamentalmente diversa da un'app Web per quanto riguarda la sicurezza: il server non può fidarsi di nulla che il client sta inviando. Il server deve convalidare l'autorizzazione di ogni richiesta ricevuta. In particolare, devi autorizzare gli utenti, non i dispositivi.

Hai ragione che inviare la password ogni volta potrebbe essere problematico. Invece, usa un token di autenticazione di breve durata (come un cookie con app web) che è firmato crittograficamente dal server. Il token viene rilasciato dal server al momento dell'accesso con nome utente / password. Questo token include informazioni protette come il nome utente. Il client invia il token come autenticazione con richieste successive. Il server quindi controlla la firma del token per vedere se il token è valido. Confronta anche JWT per uno schema esistente - NON inventare il tuo. Se implementato correttamente, le informazioni in un token non possono essere modificate dal client.

La memorizzazione del token nell'app è più sicura rispetto all'archiviazione di una password in chiaro, ma sono comunque informazioni riservate. In alcuni casi, potrebbe essere opportuno limitare la validità del token a un certo intervallo di tempo fino a quando non è richiesta una nuova autenticazione. Si consiglia inoltre di eseguire nuovamente l'autenticazione per le operazioni con privilegi. Ma la maggior parte delle app in realtà non è così importante e dovrebbe consentire i token con durate lunghe.

Un telefono root è una minaccia? La sicurezza del client non dovrebbe influire sulla sicurezza del server, quindi schemi come i token firmati dal server. In generale, la persona che ha effettuato il rooting di un telefono e la persona che detiene un account utente del servizio sono stessa persona . Non puoi difendere qualcuno contro se stesso, quindi non è ragionevole o possibile impedire l'estrazione di chiavi, password o token dalla tua app.

La minaccia principale w.r.t. i telefoni rooted sono malware che l'utente ha (inconsapevolmente) installato o che il produttore del dispositivo ha preinstallato. Non si può ragionevolmente difendersi da questo, anche se alcune app sensibili alla sicurezza cercano segni di root e si rifiutano di girare su dispositivi rooted.

    
risposta data 17.09.2018 - 14:49
fonte

Leggi altre domande sui tag