287

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

应该明确地将 android:allowBackup 设置为 true 或 false(默认情况下为 true,这可能会对应用程序的数据产生一些安全隐患)

官方网站上,他们写道:

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

这是什么警告?什么是备份功能,如何使用它?

另外,为什么警告告诉我它有安全隐患?禁用此功能有哪些缺点和优点?


清单的备份有两个概念:

  • "android: allowBackup " 允许通过 adb 进行备份和恢复,如下所示

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

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

但是,我认为这不是问题,因为大多数用户不知道 adb 是什么,如果他们知道,他们也会知道如何 root 设备。ADB 功能只有在设备启用了调试功能的情况下才能工作,这需要用户启用它。

因此,只有将设备连接到 PC 并启用调试功能的用户才会受到影响。如果他们的 PC 上有使用 ADB 工具的恶意应用程序,这可能会出现问题,因为该应用程序可以读取私有存储数据。

我认为谷歌应该在开发者类别中添加一个默认禁用的功能,以允许通过 ADB 备份和恢复应用程序。

  • “android: backupAgent ”允许使用云的备份和恢复功能如下所示

实现应用程序的备份代理的类的名称,BackupAgent 的子类。属性值应该是完全限定的类名(例如,“com.example.project.MyBackupAgent”)。但是,作为简写,如果名称的第一个字符是句点(例如,“.MyBackupAgent”),则会将其附加到元素中指定的包名称中。没有默认值。必须指定名称。

这不是安全问题。

4

4 回答 4

151

对于此 lint 警告,与所有其他 lint 警告一样,请注意,您可以获得比单行错误消息中的内容更完整的解释;您不必在网上搜索更多信息。

如果您通过 Eclipse 使用 lint,请打开 lint 警告视图,您可以在其中选择 lint 错误并查看更长的说明,或者在错误行调用快速修复 (Ctrl-1),其中一个建议是“解释这个问题”,也会弹出更全面的解释。如果您不使用 Eclipse,您可以从 lint ( lint --html <filename>) 生成 HTML 报告,其中包括警告旁边的完整解释,或者您可以要求 lint 解释特定问题。例如,与 相关的问题allowBackup有 id AllowBackup(显示在错误消息的末尾),所以更完整的解释是:

$ ./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)

点击这里了解更多信息

于 2012-12-10T18:28:06.567 回答
31

以下是这种意义上的备份的真正含义:

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

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

您可以在此处以开发者身份注册此备份服务: https ://developer.android.com/google/backup/signup.html

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

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

于 2013-04-01T13:49:50.870 回答
8

这没有明确提及,但基于以下文档,我认为这意味着应用程序需要声明和实现 BackupAgent 才能使数据备份工作,即使在 allowBackup 设置为 true 的情况下(这是默认值)。

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

于 2012-11-17T00:02:36.000 回答
2

这是隐私问题。如果应用程序包含敏感数据,建议禁止用户备份应用程序。可以访问备份文件(即何时android:allowBackup="true"),即使在非 root 设备上也可以修改/读取应用程序的内容。

解决方案 -android:allowBackup="false"在清单文件中使用。

您可以阅读这篇文章以获取更多信息: 使用备份技术破解 Android 应用程序

于 2017-04-18T14:55:41.683 回答