Qu'est-ce que «android: allowBackup»?

267

Depuis la nouvelle version d'aperçu ADT (version 21) , ils ont un nouvel avertissement de peluches qui m'indique la prochaine chose sur le fichier manifeste (dans la balise d'application):

Devrait définir explicitement android: allowBackup sur true ou false (c'est vrai par défaut, et cela peut avoir des implications de sécurité pour les données de l'application)

Sur le site officiel , ils ont écrit:

Quelques nouvelles vérifications: vous devez explicitement décider si votre application autorise les sauvegardes et une vérification d'étiquette. Il y a un nouvel indicateur de ligne de commande pour définir le chemin de la bibliothèque. De nombreuses améliorations de l'analyse incrémentielle des peluches lors de l'édition.

Quel est cet avertissement? Qu'est-ce que la fonction de sauvegarde et comment l'utiliser?

De plus, pourquoi l'avertissement me dit-il que cela a des implications sur la sécurité? Quels sont les inconvénients et les avantages de désactiver cette fonction?


Il existe deux concepts de sauvegarde pour le manifeste:

  • "android: allowBackup " permet de sauvegarder et restaurer via adb, comme illustré ici :

Indique s'il faut autoriser l'application à participer à l'infrastructure de sauvegarde et de restauration. Si cet attribut est défini sur false, aucune sauvegarde ou restauration de l'application ne sera jamais effectuée, même par une sauvegarde complète du système qui autrement entraînerait la sauvegarde de toutes les données d'application via adb. La valeur par défaut de cet attribut est vraie.

Ceci est considéré comme un problème de sécurité car les gens pourraient sauvegarder votre application via ADB et ensuite obtenir les données privées de votre application sur leur PC.

Cependant, je pense que ce n'est pas un problème, car la plupart des utilisateurs ne savent pas ce qu'est adb, et s'ils le savent, ils sauront également comment rooter l'appareil. Les fonctions ADB ne fonctionneraient que si le périphérique a la fonctionnalité de débogage activée, et cela nécessite que l'utilisateur l'active.

Ainsi, seuls les utilisateurs qui connectent leurs appareils au PC et activent la fonction de débogage seraient affectés. S'ils ont une application malveillante sur leur PC qui utilise les outils ADB, cela pourrait être problématique car l'application pourrait lire les données de stockage privé.

Je pense que Google devrait simplement ajouter une fonctionnalité qui est désactivée par défaut, dans la catégorie développeur, pour permettre la sauvegarde et la restauration des applications via ADB.

  • "android: backupAgent " permet d'utiliser la fonction de sauvegarde et de restauration du cloud, comme illustré ici et ici :

Nom de la classe qui implémente l'agent de sauvegarde de l'application, une sous-classe de BackupAgent. La valeur d'attribut doit être un nom de classe complet (tel que "com.example.project.MyBackupAgent"). Cependant, en raccourci, si le premier caractère du nom est un point (par exemple, ".MyBackupAgent"), il est ajouté au nom de package spécifié dans l'élément. Il n'y a pas de défaut. Le nom doit être spécifié.

Ce n'est pas un problème de sécurité.

développeur android
la source
Je pense que vous devriez supprimer ces informations supplémentaires dans votre édition, car cela fait référence au service cloud de sauvegarde, au lieu de l'outil de sauvegarde ADB auquel ce problème fait référence (selon la réponse de Tor Norbye)
Tony Chan
@Turbo oui, vous avez raison. je pense qu'il n'a pas été mis à jour autant quand je l'ai lu, mais maintenant c'est clair. je mettrai à jour la question. Merci. je me demande si la fonction de sauvegarde adb peut être utilisée sur des appareils enracinés même pour les applications qui l'ont définie sur false.
développeur Android
2
@IgorGanapolsky donc je suis totalement confus en ce moment. pourquoi l'ont-ils mentionné dans 2 fonctionnalités totalement différentes? est-il possible que le même drapeau soit responsable des deux caractéristiques? ou c'est peut-être une erreur? pensez-vous que je devrais décocher la réponse que j'ai cochée?
développeur Android
1
@androiddeveloper La raison pour laquelle le même attribut exact existe sur les deux fonctionnalités est probablement parce qu'il est destiné au même but ultime: la sauvegarde des données. Que ce soit sur l'appareil ou dans le cloud ...
IgorGanapolsky
3
En tant qu'utilisateur Android, je voudrais peser pour quiconque le trouve et dire que je ne supporte pas les applications - et il y en a beaucoup - qui désactivent la sauvegarde. Si une personne a accès à un téléphone déverrouillé, elle devrait pouvoir en copier des données. À ce stade, toute mesure de «sécurité» est dénuée de sens, car elle pourrait toujours rooter le téléphone pour obtenir les données. Mais en tant qu'utilisateur, pouvoir sauvegarder mes données d'application (sans enraciner ni déclencher mon bit Knox) ​​est extrêmement précieux. Il est vraiment frustrant de voir que tant d'applications le interdisent, et honnêtement, Android a même ce commutateur.
Nathan Stretch

Réponses:

139

Pour cet avertissement de peluches, comme pour tous les autres avertissements de peluches, notez que vous pouvez obtenir une explication plus complète que celle contenue dans le message d'erreur d'une ligne; vous n'avez pas besoin de rechercher sur le Web pour plus d'informations.

Si vous utilisez lint via Eclipse, ouvrez la vue des avertissements de lint, où vous pouvez sélectionner l'erreur de lint et voir une explication plus longue, ou invoquer la correction rapide (Ctrl-1) sur la ligne d'erreur, et l'une des suggestions est " Expliquez ce problème ", qui affichera également une explication plus complète. Si vous n'utilisez pas Eclipse, vous pouvez générer un rapport HTML à partir de lint ( lint --html <filename>) qui inclut des explications complètes à côté des avertissements, ou vous pouvez demander à lint d'expliquer un problème particulier. Par exemple, le problème lié à allowBackupa l'ID AllowBackup(affiché à la fin du message d'erreur), donc l'explication plus complète est:

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

Priority: 3 / 10
Severity: Warning
Category: Security

L' allowBackupattribut détermine si les données d'une application peuvent être sauvegardées et restaurées, comme indiqué ici .

Par défaut, cet indicateur est défini sur true. Lorsque cet indicateur est défini sur true, les données d'application peuvent être sauvegardées et restaurées par l'utilisateur à l'aide de adb backupet adb restore.

Cela peut avoir des conséquences sur la sécurité d'une application. adb backuppermet aux utilisateurs qui ont activé le débogage USB de copier les données d'application hors de l'appareil. Une fois sauvegardées, toutes les données d'application peuvent être lues par l'utilisateur. adb restorepermet la création de données d'application à partir d'une source spécifiée par l'utilisateur. Après une restauration, les applications ne doivent pas supposer que les données, les autorisations de fichier et les autorisations de répertoire ont été créées par l'application elle-même.

La configuration allowBackup="false"opte pour une application hors de la sauvegarde et de la restauration.

Pour corriger cet avertissement, décidez si votre application doit prendre en charge la sauvegarde et définir explicitement android:allowBackup=(true|false)

Cliquez ici pour plus d'informations

Tor Norbye
la source
35
les utilisateurs ne savent généralement même pas ce qu'est adb, et s'ils le font, ils savent probablement comment rooter leur appareil et obtenir les données par eux-mêmes de toute façon, non?
développeur Android
1
@Tor Lorsque vous dites «copier les données d'application hors de l'appareil», voulez-vous dire copier depuis data / data / com.myapp ou depuis sdcard? L'ancien répertoire est protégé et ne peut être lu que si le périphérique est enraciné.
IgorGanapolsky
2
Donc, pour clarifier cette sauvegarde à laquelle Lint fait référence, c'est l'outil ADB, et non le service de sauvegarde dans le cloud, n'est-ce pas? Il semble que beaucoup d'autres réponses deviennent confuses.
Tony Chan
1
@IgorGanapolsky je pense que l'utilisation d'ADB copiera les données privées, et c'est pourquoi il y a un avertissement. Je pense que seules les personnes ayant activé la fonction de débogage et connecté leur appareil au PC sont concernées. ces personnes sont généralement des utilisateurs avancés ou des développeurs, elles doivent donc savoir ce qu'elles font. le risque de sécurité est pour les personnes qui l'ont fait par erreur et ont installé une application malveillante sur le PC qui utilise l'outil ADB pour effectuer ces opérations. il existe une application pour la sauvegarde et la restauration sans racine, appelée "Helium": play.google.com/store/apps/…
développeur Android
"Si vous utilisez des peluches via Eclipse ..", vous devriez probablement migrer vers AndroidStudio car le plugin ADT est obsolète.
throws_exceptions_at_you
26

Voici ce que signifie réellement la sauvegarde dans ce sens:

Le service de sauvegarde d'Android vous permet de copier les données persistantes de votre application vers un stockage "cloud" distant, afin de fournir un point de restauration pour les données et les paramètres de l'application. Si un utilisateur effectue une réinitialisation d'usine ou se convertit en un nouvel appareil Android, le système restaure automatiquement vos données de sauvegarde lorsque l'application est réinstallée. De cette façon, vos utilisateurs n'ont pas besoin de reproduire leurs données ou paramètres d'application précédents.

~ Extrait de http://developer.android.com/guide/topics/data/backup.html

Vous pouvez vous inscrire à ce service de sauvegarde en tant que développeur ici: https://developer.android.com/google/backup/signup.html

Les types de données qui peuvent être sauvegardés sont les fichiers, les bases de données, les préférences partagées, le cache et la bibliothèque. Ceux-ci sont généralement stockés dans le répertoire /data/data/[com.myapp] de votre appareil, qui est protégé en lecture et auquel vous ne pouvez pas accéder à moins que vous ne disposiez des privilèges root.

MISE À JOUR : Vous pouvez voir cet indicateur répertorié sur le doc api de BackupManager : BackupManager

IgorGanapolsky
la source
4
Je pense que les modifications apportées au niveau 23 de l'API indiquent que c'est la bonne réponse. Voici les documents de formation pour les changements: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65
8

Ce n'est pas explicitement mentionné, mais sur la base des documents suivants, je pense qu'il est implicite qu'une application doit déclarer et implémenter un BackupAgent pour que la sauvegarde de données fonctionne, même dans le cas où allowBackup est défini sur true (qui est le valeur par défaut).

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 / topics / data / backup.html

Yuntao
la source
que se passe-t-il si l'application n'a rien en rapport avec le backupAgent? Android sauvegardera-t-il automatiquement ses données néanmoins?
développeur Android
1
la bonne réponse se trouve ici: stackoverflow.com/a/13806946/878126 . il semble que cela n'a rien à voir avec le backupAgent. j'ai également mis à jour ma question pour montrer de quoi il s'agit.
développeur Android
3

C'est un souci de confidentialité . Il est recommandé d'interdire aux utilisateurs de sauvegarder une application si elle contient des données sensibles. Ayant accès aux fichiers de sauvegarde (c'est-à-dire quand android:allowBackup="true"), il est possible de modifier / lire le contenu d'une application même sur un appareil non rooté.

Solution - utiliser android:allowBackup="false"dans le fichier manifeste.

Vous pouvez lire cet article pour avoir plus d'informations: Piratage d'applications Android à l'aide de techniques de sauvegarde

Ayaz Alifov
la source
1
êtes-vous sérieux avec cette réponse en 2017? veuillez le lire ici developer.android.com/guide/topics/data/…
batmaci
Vous pouvez désactiver les sauvegardes en définissant android: allowBackup sur false. Vous pouvez le faire si votre application peut recréer son état via un autre mécanisme ou si votre application traite des informations sensibles qu'Android ne devrait pas sauvegarder.
Edgar Khimich
Actuellement, vous pouvez exclure les données sensibles des sauvegardes via les attributs dans le manifeste.
Yousha Aleayoub