Che cos'è "android: allowBackup"?


267

Dalla nuova versione di anteprima di ADT (versione 21) , hanno un nuovo avvertimento per i lint che mi dice la cosa successiva sul file manifest (nel tag dell'applicazione):

Dovrebbe impostare esplicitamente android: allowBackup su true o false (è true per impostazione predefinita e ciò può avere alcune implicazioni di sicurezza per i dati dell'applicazione)

Nel sito ufficiale hanno scritto:

Un paio di nuovi controlli: è necessario decidere esplicitamente se l'app consente i backup e un controllo dell'etichetta. C'è un nuovo flag della riga di comando per impostare il percorso della libreria. Molti miglioramenti all'analisi dei pelucchi incrementale durante la modifica.

Che cos'è questo avviso? Cos'è la funzione di backup e come si usa?

Inoltre, perché l'avviso mi dice che ha implicazioni per la sicurezza? Quali sono gli svantaggi e i vantaggi di disabilitare questa funzione?


Esistono due concetti di backup per manifest:

  • "android: allowBackup " consente di eseguire il backup e il ripristino tramite adb, come mostrato qui :

Se consentire all'applicazione di partecipare al backup e ripristinare l'infrastruttura. Se questo attributo è impostato su false, non verrà mai eseguito alcun backup o ripristino dell'applicazione, anche mediante un backup di sistema completo che altrimenti farebbe salvare tutti i dati dell'applicazione tramite adb. Il valore predefinito di questo attributo è vero.

Questo è considerato un problema di sicurezza perché le persone potrebbero eseguire il backup della tua app tramite ADB e quindi ottenere i dati privati ​​della tua app sul proprio PC.

Tuttavia, penso che non sia un problema, dal momento che la maggior parte degli utenti non sa cosa sia l'Adb, e se lo fa, saprà anche come eseguire il root del dispositivo. Le funzioni ADB funzionerebbero solo se sul dispositivo è abilitata la funzione di debug e ciò deve essere abilitato dall'utente.

Pertanto, solo gli utenti che collegano i propri dispositivi al PC e abilitano la funzione di debug ne risentiranno. Se sul proprio PC è presente un'app dannosa che utilizza gli strumenti ADB, ciò potrebbe essere problematico poiché l'app potrebbe leggere i dati di archiviazione privata.

Penso che Google dovrebbe semplicemente aggiungere una funzionalità disabilitata per impostazione predefinita, nella categoria degli sviluppatori, per consentire il backup e il ripristino delle app tramite ADB.

  • "android: backupAgent " consente di utilizzare la funzione di backup e ripristino del cloud, come mostrato qui e qui :

Il nome della classe che implementa è l'agente di backup dell'applicazione, una sottoclasse di BackupAgent. Il valore dell'attributo dovrebbe essere un nome di classe completo (ad esempio "com.example.project.MyBackupAgent"). Tuttavia, come abbreviazione, se il primo carattere del nome è un punto (ad esempio, ".MyBackupAgent"), viene aggiunto al nome del pacchetto specificato nell'elemento. Non esiste alcun valore predefinito. È necessario specificare il nome.

Questo non è un problema di sicurezza.


Penso che dovresti rimuovere quelle informazioni aggiuntive nella tua Modifica, perché si riferisce al servizio cloud di Backup, invece dello strumento di backup ADB a cui questo problema fa effettivamente riferimento (secondo la risposta di Tor Norbye)
Tony Chan,

@Turbo sì, hai ragione. penso che non sia stato aggiornato così tanto quando l'ho letto, ma ora è chiaro. aggiornerò la domanda. Grazie. mi chiedo se la funzione di backup adb può essere utilizzata su dispositivi rooted anche per le app che l'hanno impostata su false.
sviluppatore Android

2
@IgorGanapolsky quindi sono totalmente confuso in questo momento. perché l'hanno menzionato in 2 funzioni totalmente diverse? è possibile che lo stesso flag sia responsabile di entrambe le funzionalità? o forse è un errore? pensi che dovrei deselezionare la risposta che ho spuntato?
sviluppatore Android

1
@androiddeveloper Il motivo per cui esiste lo stesso attributo esatto su entrambe le funzionalità è probabilmente perché è destinato allo stesso scopo finale: il backup dei dati. Sia sul dispositivo che nel cloud ...
IgorGanapolsky,

3
Come utente Android mi piacerebbe che qualcuno lo trovasse e dire che non sopporto le app - e ce ne sono molte - che disabilitano il backup. Se una persona ha accesso a un telefono sbloccato, dovrebbe essere in grado di copiarne i dati. Qualsiasi misura di "sicurezza" a quel punto non ha senso, in quanto potrebbero sempre eseguire il root del telefono per ottenere i dati. Ma come utente, essere in grado di eseguire il backup dei dati della mia app (senza il rooting e il trip del mio bit Knox) ​​è estremamente prezioso. È davvero frustrante che così tante app non lo consentano e, onestamente, Android ha persino questo interruttore.
Nathan Stretch,

Risposte:


139

Per questo avviso di lanugine, come per tutti gli altri avvisi di lanugine, notare che è possibile ottenere una spiegazione più completa di quella contenuta nel messaggio di errore di una riga; non devi cercare nel web per maggiori informazioni.

Se stai usando lint tramite Eclipse, apri la vista degli avvisi di lint, dove puoi selezionare l'errore lint e vedere una spiegazione più lunga, oppure invocare la correzione rapida (Ctrl-1) sulla riga dell'errore e uno dei suggerimenti è " Spiega questo problema ", che mostrerà anche una spiegazione più completa. Se non si utilizza Eclipse, è possibile generare un rapporto HTML da lint ( lint --html <filename>) che includa spiegazioni complete accanto agli avvisi, oppure è possibile chiedere a lint di spiegare un particolare problema. Ad esempio, il problema correlato allowBackupha l'id AllowBackup(mostrato alla fine del messaggio di errore), quindi la spiegazione più completa è:

$ ./lint --show AllowBackup
AllowBackup
-----------
Summary: Ensure that allowBackup is explicitly set in the application's
manifest

Priority: 3 / 10
Severity: Warning
Category: Security

L' allowBackupattributo determina se è possibile eseguire il backup e il ripristino dei dati di un'applicazione, come documentato qui .

Per impostazione predefinita, questo flag è impostato su true. Quando questo flag è impostato su true, è possibile eseguire il backup e il ripristino dei dati dell'applicazione da parte dell'utente mediante adb backupe adb restore.

Ciò può avere conseguenze sulla sicurezza per un'applicazione. adb backupconsente agli utenti che hanno abilitato il debug USB di copiare i dati dell'applicazione dal dispositivo. Una volta eseguito il backup, tutti i dati dell'applicazione possono essere letti dall'utente. adb restoreconsente la creazione di dati dell'applicazione da una fonte specificata dall'utente. A seguito di un ripristino, le applicazioni non devono presumere che i dati, le autorizzazioni dei file e le autorizzazioni della directory siano stati creati dall'applicazione stessa.

L'impostazione allowBackup="false"esclude un'applicazione sia dal backup che dal ripristino.

Per correggere questo avviso, decidere se l'applicazione deve supportare il backup e impostare esplicitamente android:allowBackup=(true|false)

Clicca qui per maggiori informazioni


35
gli utenti di solito non sanno nemmeno cosa sia l'adb e, se lo fanno, probabilmente sanno come eseguire il root del proprio dispositivo e ottenere i dati da soli, no?
Sviluppatore Android

1
@Tor Quando dici "copia i dati dell'applicazione dal dispositivo", vuoi dire copia da data / data / com.myapp o da sdcard? La prima directory è protetta e non può essere letta se il dispositivo non è rootato.
IgorGanapolsky,

2
Quindi per chiarire questo backup a cui fa riferimento Lint è lo strumento ADB e non il servizio di backup su cloud, giusto? Sembra che molte altre risposte stiano diventando così confuse.
Tony Chan,

1
@IgorGanapolsky penso che l'uso di ADB copierà i dati privati, ed è per questo che c'è un avviso. penso che siano interessate solo le persone che hanno abilitato la funzione di debug e collegano il proprio dispositivo al PC. queste persone sono di solito utenti esperti o sviluppatori, quindi dovrebbero sapere cosa stanno facendo. il rischio per la sicurezza è per le persone che lo hanno fatto per errore e hanno installato sul PC un'app dannosa che utilizza lo strumento ADB per eseguire tali operazioni. c'è un'app per il backup e il ripristino senza root, chiamata "Helium": play.google.com/store/apps/…
sviluppatore Android

"Se stai usando lint tramite Eclipse .." probabilmente dovresti migrare su AndroidStudio poiché il plug-in ADT è obsoleto.
throws_exceptions_at_you il

26

Ecco cosa significa veramente backup in questo senso:

Il servizio di backup di Android ti consente di copiare i dati delle tue applicazioni persistenti nella memoria "cloud" remota, al fine di fornire un punto di ripristino per i dati e le impostazioni dell'applicazione. Se un utente esegue un ripristino delle impostazioni di fabbrica o si converte in un nuovo dispositivo Android, il sistema ripristina automaticamente i dati di backup quando l'applicazione viene reinstallata. In questo modo, gli utenti non devono riprodurre i dati precedenti o le impostazioni dell'applicazione.

~ Tratto da http://developer.android.com/guide/topics/data/backup.html

Puoi registrarti a questo servizio di backup come sviluppatore qui: https://developer.android.com/google/backup/signup.html

Il tipo di dati di cui è possibile eseguire il backup sono file, database, preferenze condivise, cache e lib. Questi sono generalmente memorizzati nella directory /data/data/[com.myapp] del dispositivo, che è protetta da lettura e non è possibile accedervi se non si dispone dei privilegi di root.

AGGIORNAMENTO : È possibile visualizzare questo flag elencato nel documento API di BackupManager : BackupManager


4
Penso che i cambiamenti nel livello API 23 indicano che questa è la risposta corretta. Ecco i documenti di formazione per le modifiche: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65

8

Questo non è esplicitamente menzionato, ma in base ai seguenti documenti, penso che sia implicito che un'app deve dichiarare e implementare un BackupAgent affinché il backup dei dati funzioni, anche nel caso in cui allowBackup sia impostato su true (che è il valore predefinito).

http://developer.android.com/reference/android/R.attr.html#allowBackup http://developer.android.com/reference/android/app/backup/BackupManager.html http://developer.android. com / guide / argomenti / dati / backup.html


cosa succede se l'app non ha nulla correlato a backupAgent? Android eseguirà comunque il backup automatico dei suoi dati?
sviluppatore Android il

1
la risposta corretta si trova qui: stackoverflow.com/a/13806946/878126 . sembra che non abbia nulla a che fare con backupAgent. ho anche aggiornato la mia domanda per mostrare di cosa si tratta.
sviluppatore Android

3

È un problema di privacy . Si consiglia di non consentire agli utenti di eseguire il backup di un'app se contiene dati riservati. Avendo accesso ai file di backup (cioè quando android:allowBackup="true"), è possibile modificare / leggere il contenuto di un'app anche su un dispositivo non rootato.

Soluzione: utilizzare android:allowBackup="false"nel file manifest.

Puoi leggere questo post per avere maggiori informazioni: Hacking delle app Android usando le tecniche di backup


1
sei serio con questa risposta nel 2017? leggi qui developer.android.com/guide/topics/data/…
batmaci

Puoi disabilitare i backup impostando android: allowBackup su false. Potresti voler fare questo se la tua app può ricreare il suo stato attraverso qualche altro meccanismo o se la tua app gestisce informazioni sensibili di cui Android non dovrebbe eseguire il backup.
Edgar Khimich,

Attualmente è possibile escludere dati sensibili dai backup tramite attributi in manifest.
Yousha Aleayoub,
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.