Come gestire correttamente le password per un'app Android

2

Quindi, alcuni retroscena. Attualmente sto lavorando a un'app di social media per Android. Stiamo programmando in Java e stiamo usando OKHTTP3 per una connessione al backend PHP, che gestirà l'aggiornamento del database MySQL e l'archiviazione.

La mia domanda è questa: come devo gestire le password? Una volta che l'utente ha inserito le proprie credenziali nel modulo di login, devo cancellare la password (intendiamo utilizzare bcrypt) e poi inviarle tramite il backend PHP per l'archiviazione immediata? O il backend PHP deve fare più hashing di sicurezza o crittografia?

Il modo in cui penso che sarà fatto adesso è questo: 1. L'utente inserisce le credenziali per l'iscrizione 2. La password è cancellata 3. Le credenziali vengono inviate al server 4. Le credenziali sono inserite in MySQL - Cosa dovrebbe essere fatto in modo diverso? Va bene?

Lettura facendo un'app per iPhone / Android che invia una password utente al mio server, come proteggere? non ha risposto abbastanza bene alla mia domanda.

    
posta Bobdabiulder 24.08.2016 - 17:52
fonte

2 risposte

2

Comprendi male lo scopo di un hash.

Un hash crittograficamente sicuro è una funzione unidirezionale, in modo che il testo originale (la password) non possa essere determinato se non per forza bruta.

Nel tuo esempio, non è necessario trovare il testo originale. Se l'attaccante ruba l'hash, può comunque accedere senza conoscere la password originale, semplicemente alterando una copia dell'app per utilizzare l'hash rubato invece di generarne uno nuovo.

Il tuo server dovrebbe eseguire l'hashing internamente, non l'app. (Lato client)

Per le password, devi usare Slow Hash come BCrypt, con un alto fattore di lavoro. Questo dovrebbe richiedere circa 100ms sull'hardware di destinazione (con la protezione DoS appropriata), sapendo che l'hardware brute-forcing di un hacker sarà molto più veloce.

Ricorda che non è possibile proteggere% deboli password , indipendentemente dalla lentezza della tua funzione hash.

Assicurati inoltre di utilizzare una connessione HTTPS tra l'app e il server, poiché gli utenti mobili possono utilizzare il WiFi condiviso che potrebbe essere facilmente utilizzato per falsare le connessioni HTTP semplici.

    
risposta data 23.09.2016 - 19:03
fonte
-2

È possibile eseguire normalmente il controllo regex degli input da inviare al server. Usa una connessione https per inviare le tue credenziali. Forse retrofit invece okhttp3? (solo per semplicità non per ragioni di sicurezza). Questa è una buona base per avviare IMHO. Se hai bisogno di memorizzare informazioni su Android puoi usare Realm. È un database mobile che supporta la crittografia ed è una soluzione semplice per memorizzare le informazioni sul dispositivo. Se è necessario memorizzare solo la password, suggerirei di utilizzare la funzione "Keystore" del sistema Android.

    
risposta data 24.08.2016 - 18:06
fonte

Leggi altre domande sui tag