Sicurezza di Android SharedPreference


118

Mi chiedo della sicurezza delle preferenze condivise.

È possibile accedere alle preferenze condivise, anche se sono state create in MODE_PRIV (0)?
È possibile elencare tutte le preferenze condivise disponibili e quindi recuperare tutte le impostazioni da altre app?
Sharedpreferences è un buon posto per inserire dati sensibili, come password o token di autenticazione?

Grazie



Vale la pena dare un'occhiata, con belle risposte. Le preferenze condivise dicono molto sullo stile di programmazione dello sviluppatore.
Vishwa Ratna,

Risposte:


232

Le preferenze condivise vengono memorizzate come file nel filesystem sul dispositivo. Per impostazione predefinita, sono archiviati nella directory dei dati dell'app con le autorizzazioni del file system impostate che consentono solo all'UID con cui viene eseguita l'applicazione specifica di accedervi. Quindi, sono privati ​​in quanto i permessi dei file Linux ne limitano l'accesso, come su qualsiasi sistema Linux / Unix.

Chiunque abbia accesso a livello di root al dispositivo sarà in grado di vederli, poiché root ha accesso a tutto sul filesystem. Inoltre, qualsiasi applicazione che viene eseguita con lo stesso UID dell'app di creazione sarebbe in grado di accedervi (questo di solito non viene fatto ed è necessario intraprendere un'azione specifica per far funzionare due app con lo stesso UID, quindi questo probabilmente non è un grande preoccupazione). Infine, se qualcuno fosse in grado di montare il filesystem del tuo dispositivo senza utilizzare il sistema operativo Android installato, potrebbe anche bypassare le autorizzazioni che limitano l'accesso.

Se sei preoccupato per tale accesso alle tue preferenze (o ai dati scritti dalla tua applicazione), allora vorrai crittografarlo. Se sei così preoccupato per loro, dovrai capire esattamente quanta protezione è necessaria per il livello di rischio che vedi. C'è una discussione molto ampia su questo in Application Security for the Android Platform , appena pubblicato nel dicembre 2011 (disclaimer: sono l'autore di questo libro).


2
C'è qualche documentazione ufficiale che ne parli? Hai qualche referenza?
clu

26

Le preferenze condivise non sono altro che file XML nei tuoi telefoni / dati / dati / cartella, quindi qualsiasi applicazione o utente con privilegi di superutente su un dispositivo rooted può accedere alle tue preferenze condivise, anche se sono state create con MODE_PRIV

C'è ancora un modo per proteggerlo da tutti ... Per favore controlla questo link. Qui puoi memorizzare i dati in pref con crittografia, la classe è autoesplicativa e molto facile da usare.

https://github.com/sveinungkb/encrypted-userprefs

Come detto da altri chiunque può accedervi ma in questo caso nessuno può leggere i dati al suo interno in quanto crittografati. Quindi è sicuro Per la massima sicurezza il mio suggerimento sarà di generare la chiave utilizzata per la crittografia in fase di esecuzione piuttosto che codificarla. Ci sono molti modi per farlo :)


8
allora come si salva la chiave generata?
Olayinka

3
@Olayinka Sarebbe più sicuro crittografarlo con un'altra chiave e salvarlo in un file SharedPref. Ma allora cosa fare con l'altra chiave? Seriamente, però, lo scenario migliore sarebbe inviare la chiave crittografata e un UID del dispositivo a un server utilizzando SSL per essere archiviati lì e recuperati secondo necessità. Ciò richiederebbe la connettività, ma ti consentirebbe di inserire un dispositivo nella lista nera e improvvisamente cestinare tutti i dati. Senza una connessione Internet costante, qualsiasi tentativo di crittografare i dati non è sicuro al 100%.
Paulo Avelar

Ho usato la soluzione sopra ... funziona 9 volte su 10..ma ricevo errore: 1e06b065: Funzioni di cifratura: EVP_DecryptFinal_ex: BAD_DECRYPT "a volte .. Qualcuno ha un'idea?
Raj Trivedi

3
@PauloAvelar Usa Android KeyStore per l'archiviazione a lungo termine e il recupero delle chiavi crittografiche. Le chiavi non vengono memorizzate all'interno di un'applicazione, quindi non possono essere compromesse. La libreria fornita non lo usa. Salva il segreto nel codice, quindi non è sicuro.
apex39

13

Normalmente no, non possono essere acceduti da altre app, tuttavia, dovresti notare che SharedPreferences sono archiviate come file XML nella /data/data/directory, il che significa essenzialmente che qualsiasi applicazione con privilegi di superutente su un dispositivo rooted può accedere alle tue SharedPreference, anche se lo fossero creato conMODE_PRIV


3

È possibile accedere alle preferenze condivise, anche se sono state create in MODE_PRIV (0)?

Per codice No. Ma è possibile recuperare il file dell'applicazione se si dispone dei privilegi di super utente.

È possibile elencare tutte le preferenze condivise disponibili e quindi recuperare tutte le impostazioni da altre app?

Se sei un super utente (dispositivi rooted), puoi estrarre tutti i file privati ​​dell'app.

Sharedpreferences è un buon posto per inserire dati sensibili, come password o token di autenticazione?

No. Può essere facilmente violato. Se desideri inserire dati sensibili in un file di preferenza condiviso, puoi crittografare i dati e archiviarli. È possibile memorizzare la chiave di crittografia in NDK / server.


Come può essere facilmente violato?
John Sardinha

Sì, il modulo di domanda @Jo
Cuong Vo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.