“android:allowBackup”是什么?

295
自从新的ADT预览版(版本21)以来,他们有一个新的lint警告,告诉我清单文件中应用程序标签上的下一步操作:

应该明确将android:allowBackup设置为true或false(默认为true,这可能对应用程序数据的安全性产生一些影响)

官方网站上,他们写道:

几个新的检查:您必须明确决定您的应用程序是否允许备份,以及标签检查。有一个新的命令行标志用于设置库路径。在编辑时,增量lint分析有很多改进。

这是什么警告?备份功能是什么,如何使用它?
此外,为什么警告告诉我它具有安全影响?禁用此功能的优缺点是什么?

备份清单有两个概念:

  • "android:allowBackup" 允许通过adb备份和还原,如此处所示 here:

是否允许应用程序参与备份和还原基础架构。如果将此属性设置为false,则永远不会执行应用程序的备份或还原操作,即使是通过adb保存所有应用程序数据的全系统备份也是如此。此属性的默认值为true。

这被认为是一个安全问题,因为人们可以通过ADB备份您的应用程序,然后将您应用程序的私有数据传输到他们的PC中。

然而,我认为这不是一个大问题,因为大多数用户不知道adb是什么,而如果他们知道,他们也会知道如何获取root权限。 ADB功能只有在设备启用调试功能时才能工作,而这需要用户启用它。 所以,只有将设备连接到PC并启用调试功能的用户才会受到影响。如果他们的PC上有恶意应用程序使用ADB工具,则可能会出现问题,因为该应用程序可以读取私有存储数据。

我认为Google应该添加一个默认禁用的开发者类别功能,允许通过ADB备份和还原应用程序。
“android:backupAgent”允许使用云备份和还原功能,如此处此处所示:
备份代理的名称,BackupAgent的子类,实现应用程序的备份代理。属性值应该是完全限定的类名(例如,“com.example.project.MyBackupAgent”)。但是,作为一种速记方式,如果名称的第一个字符是一个句点(例如,“.MyBackupAgent”),则它被附加到元素中指定的包名称。没有默认值。必须指定名称。
这不是安全问题。

我认为你应该删除编辑中的额外信息,因为那是指备份云服务,而不是实际上这个问题所涉及的ADB备份工具(根据Tor Norbye的回答)。 - Tony Chan
@Turbo 是的,你说得对。我想当我读它的时候它没有被更新这么多,但现在很清楚了。我会更新问题的。谢谢。我想知道即使对于已将其设置为false的应用程序,adb备份功能是否可以在已root的设备上使用。 - android developer
2
@IgorGanapolsky 我现在完全困惑了。为什么他们在两个完全不同的功能中都提到了它?同一个标志是否负责这两个功能?或者可能是一个错误吗?你认为我应该取消我已经选择的答案吗? - android developer
1
@androiddeveloper 同一属性在两个功能上存在的原因可能是因为它旨在用于相同的最终目的:备份数据。无论是在设备上还是在云端... - IgorGanapolsky
3
作为一名安卓用户,我想要就此发表意见,并声明我无法忍受那些禁用备份的应用程序(数量众多)。如果一个人可以接触到解锁的手机,他们应该能够从中复制数据。此时任何“安全”措施都是没有意义的,因为他们总可以获取数据来root手机。 但是对于用户而言,能够备份我的应用数据(不需要root并破坏Knox位)非常有价值。很令人沮丧的是,这么多应用程序不允许备份,并且安卓甚至有这个开关也让人感到失望。 - Nathan Stretch
显示剩余6条评论
6个回答

154
对于这个lint警告,以及所有其他lint警告,请注意您可以获得比仅在单行错误消息中看到的更详尽的解释;您不必在网上搜索更多信息。
如果您是通过Eclipse使用lint,则可以打开lint警告视图,在该视图中选择lint错误并查看更长的说明,或者在错误行上调用快速修复(Ctrl-1),其中一个建议是“解释此问题”,这也将弹出更详细的说明。如果您没有使用Eclipse,则可以从lint生成HTML报告(lint--html <filename>),其中包括警告旁边的完整解释,或者可以要求lint解释特定问题。例如,与allowBackup相关的问题具有IDAllowBackup(显示在错误消息的末尾),因此更详细的说明是:
$ ./lint --show AllowBackup
AllowBackup
-----------
Summary: Ensure that allowBackup is explicitly set in the application's
manifest

Priority: 3 / 10
Severity: Warning
Category: Security
allowBackup属性确定应用程序的数据是否可以备份和恢复,文档在此处记录。
默认情况下,此标志设置为true。当将此标志设置为true时,用户可以使用adb backupadb restore备份和还原应用程序数据。
这可能会对应用程序产生安全风险。 adb backup允许启用USB调试的用户将应用程序数据从设备中复制出来。备份后,所有应用程序数据都可以被用户读取。 adb restore允许从用户指定的源创建应用程序数据。恢复后,应用程序不应假设数据、文件权限和目录权限是应用程序自己创建的。
allowBackup =“false”设置选项使应用程序退出备份和还原。
要解决此警告,请决定您的应用程序是否支持备份并明确设置android:allowBackup=(true|false) 单击此处获取更多信息

43
用户通常甚至不知道什么是adb,如果他们知道,他们可能已经知道如何root自己的设备并自行获取数据了,对吧? - android developer
1
@Tor 当你说“从设备复制应用程序数据”时,你是指从data/data/com.myapp还是从sdcard复制?前者目录受保护,除非设备已经root,否则无法读取。 - IgorGanapolsky
3
为了澄清,Lint所提到的备份是指ADB工具,而不是云备份服务,对吗?似乎许多其他回答都把这个搞混了。 - Tony Chan
1
@IgorGanapolsky 我认为使用ADB会复制私人数据,这就是为什么会有警告的原因。我认为只有启用调试功能并将其设备连接到PC的人才会受到影响。这些人通常是高级用户或开发人员,所以他们应该知道自己在做什么。安全风险是对那些错误地在PC上安装了恶意应用程序并使用ADB工具进行这些操作的人而言的。有一个名为“Helium”的无需root的备份和还原应用程序:https://play.google.com/store/apps/details?id=com.koushikdutta.backup&hl=en - android developer
如果您正在通过Eclipse使用lint,那么您应该迁移到Android Studio,因为ADT插件已被弃用。 - throws_exceptions_at_you

35

以下是backup的实际含义:

Android的备份服务允许你将应用程序的持久化数据复制到远程的“云”存储中,以提供应用程序数据和设置的还原点。如果用户执行了出厂设置或转换到新的Android设备,则重新安装应用程序时系统会自动恢复您的备份数据。这样,您的用户就不需要再次生成他们以前的数据或应用程序设置。

~摘自http://developer.android.com/guide/topics/data/backup.html

作为开发人员,您可以在此注册备份服务: https://developer.android.com/google/backup/signup.html

可以备份的数据类型包括文件、数据库、sharedPreferences、cache和lib。这些通常存储在设备的/data/data/[com.myapp]目录中,该目录是受读保护的,除非您具有root权限,否则无法访问。

更新:: 您可以在BackupManager的API文档中看到此标志: BackupManager


5
我认为API 23级别的更改指向这是正确答案。这里是有关更改的培训文档:http://developer.android.com/training/backup/autosyncapi.html - pumpkinpie65

8

如果应用程序没有与backupAgent相关的任何内容,那么Android是否仍然会自动备份其数据? - android developer
1
正确答案在这里找到:https://dev59.com/5Wcs5IYBdhLWcg3wrmDC#13806946。看起来与备份代理无关。我还更新了我的问题以展示它的全部内容。 - android developer

3
这是一个隐私问题。如果应用程序包含敏感数据,建议禁止用户备份应用程序。访问备份文件(即当android:allowBackup="true"时),即使在非root设备上,也可能修改/读取应用程序的内容。
解决方案-在清单文件中使用android:allowBackup="false"
您可以阅读此文章以获取更多信息: 使用备份技术黑客Android应用程序

1
你是认真的吗?这个回答是在2017年发布的吗?请在此处阅读:https://developer.android.com/guide/topics/data/autobackup.html#RestoreSchedule - Emil
您可以通过将android:allowBackup设置为false来禁用备份。如果您的应用程序可以通过其他机制重新创建其状态,或者如果您的应用程序处理Android不应备份的敏感信息,则可能希望这样做。 - Edhar Khimich
目前,您可以通过清单中的属性从备份中排除敏感数据。 - Yousha Aleayoub

2

Auto Backup for Apps会自动备份用户在Android 6.0(API级别23)或更高版本上运行的应用程序的数据。

Android通过将应用程序数据上传到用户的Google Drive来保留应用程序数据,这些数据受到用户的Google账户凭据的保护。

在运行Android 9或更高版本的设备上,备份数据会使用设备的PIN码、图案或密码进行端到端加密。

备份数据存储在用户的Google Drive账户的私有文件夹中,每个应用程序限制为25 MB。

文档中提到每个用户限制为25 MB,但我认为这是一个错误。

注意:

@androiddeveloper指出已经有一个关于此问题的主题。Bug - Issue Link

Source


1
每个应用不是都是25 MB吗?我在哪里可以找到备份的示例,包括检查备份中剩余的空间,并能够从备份中删除项目? - undefined
请检查一下。我找不到关于如何实现这样一件事的太多信息。也许这就是为什么很多应用程序没有备份的原因。顺便说一下,我之所以写“每个应用程序”,是因为你写了“每个用户25MB”。 - undefined
备份数据存储在用户的Google Drive帐户中的私人文件夹中,每个应用程序限制为25 MB。然而,在文档中还指定了每个用户的25 MB。https://developer.android.com/guide/topics/data/autobackup?hl=en - undefined
说实话,我没有一个例子。但是我尽可能地更新了我的答案。非常感谢您的支持。我觉得我们发现了一个错误。 :) - undefined
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接