自 new ADT preview version (version 21) 以来,他们有一个新的 lint 警告,告诉我清单文件(在应用程序标记中)的下一件事:
应该明确地将 android:allowBackup 设置为 true 或 false(默认情况下为 true,这可能会对应用程序的数据产生一些安全隐患)
在 official website 中,他们写道:
一些新的检查:您必须明确决定您的应用是否允许备份,以及标签检查。有一个用于设置库路径的新命令行标志。编辑时对增量 lint 分析的许多改进。
这是什么警告?什么是备份功能,如何使用它?
另外,为什么警告告诉我它有安全隐患?禁用此功能有哪些缺点和优点?
清单的备份有两个概念:
"android:allowBackup" 允许通过 adb 进行备份和恢复,如下所示:
是否允许应用程序参与备份和恢复基础架构。如果此属性设置为 false,则不会执行应用程序的备份或恢复,即使是全系统备份也会导致所有应用程序数据通过 adb 保存。此属性的默认值为 true。
这被认为是一个安全问题,因为人们可以通过 ADB 备份您的应用程序,然后将您的应用程序的私人数据获取到他们的 PC 中。
但是,我认为这不是问题,因为大多数用户不知道 adb 是什么,如果他们知道,他们也会知道如何 root 设备。 ADB 功能只有在设备启用了调试功能的情况下才能工作,这需要用户启用它。
因此,只有将设备连接到 PC 并启用调试功能的用户才会受到影响。如果他们的 PC 上有使用 ADB 工具的恶意应用程序,这可能会出现问题,因为该应用程序可以读取私有存储数据。
我认为谷歌应该在开发者类别中添加一个默认禁用的功能,以允许通过 ADB 备份和恢复应用程序。
“android:backupAgent”允许使用云的备份和恢复功能,如下所示:
实现应用程序的备份代理的类的名称,BackupAgent 的子类。属性值应该是完全限定的类名(例如,“com.example.project.MyBackupAgent”)。但是,作为简写,如果名称的第一个字符是句点(例如,“.MyBackupAgent”),则会将其附加到元素中指定的包名称中。没有默认值。必须指定名称。
这不是安全问题。
对于此 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
属性确定是否可以备份和恢复应用程序的数据,如文档 here 所述。
默认情况下,此标志设置为 true。当此标志设置为 true 时,用户可以使用 adb backup 和 adb restore 备份和恢复应用程序数据。这可能会对应用程序产生安全后果。 adb backup 允许启用 USB 调试的用户从设备复制应用程序数据。备份后,用户可以读取所有应用程序数据。 adb restore 允许从用户指定的源创建应用程序数据。还原后,应用程序不应假定数据、文件权限和目录权限是由应用程序本身创建的。设置 allowBackup="false" 选择应用程序退出备份和恢复。要修复此警告,请确定您的应用程序是否应支持备份并显式设置 android:allowBackup=(true|false)
点击此处查看More information
以下是这种意义上的备份的真正含义:
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
这没有明确提及,但基于以下文档,我认为这意味着应用程序需要声明和实现 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
这是隐私问题。如果应用程序包含敏感数据,建议禁止用户备份应用程序。有权访问备份文件(即当 android:allowBackup="true"
时),即使在非 root 设备上也可以修改/读取应用程序的内容。
解决方案 - 在清单文件中使用 android:allowBackup="false"
。
您可以阅读这篇文章以了解更多信息:Hacking Android Apps Using Backup Techniques