什么是“android:allowBackup”?

Posted

技术标签:

【中文标题】什么是“android:allowBackup”?【英文标题】:What is "android:allowBackup"? 【发布时间】:2012-09-20 19:58:30 【问题描述】:

new ADT preview version (version 21) 开始,他们有一个新的 lint 警告,告诉我清单文件中的下一件事(在应用程序标记中):

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

official website,他们写道:

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

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

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


清单的备份有两个概念:

“android:allowBackup”允许通过adb进行备份和恢复,如图here:

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

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

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

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

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

“android:backupAgent”允许使用云的备份和恢复功能,如图herehere

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

这不是安全问题。

【问题讨论】:

我认为您应该在编辑中删除该附加信息,因为这是指备份云服务,而不是此问题实际引用的 ADB 备份工具(根据 Tor Norbye 的回答) @Turbo 是的,你是对的。我认为当我阅读它时它并没有更新这么多,但现在很清楚了。我会更新这个问题。谢谢。我想知道 adb 备份功能是否可以在 root 设备上使用,即使对于将其设置为 false 的应用程序也是如此。 @IgorGanapolsky 所以我现在完全糊涂了。为什么他们在 2 个完全不同的功能中提到它?是否有可能相同的标志负责这两个功能?或者这是一个错误?你认为我应该取消勾选我勾选的答案吗? @androiddeveloper 两个特性上存在相同属性的原因可能是因为它的最终目的是相同的:备份数据。无论是在设备上还是在云端... 作为 Android 用户,我想为任何发现此问题的人发表意见,并说我无法忍受禁用备份的应用程序——而且有很多应用程序。如果一个人可以访问未锁定的手机,他们应该能够从中复制数据。那时任何“安全”措施都毫无意义,因为他们总是可以通过手机获取数据。但作为用户,能够备份我的应用程序数据(无需生根和绊倒我的 Knox 位)非常有价值。如此多的应用程序不允许它真的令人沮丧,老实说,Android 甚至完全有这个开关。 【参考方案1】:

对于此 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 backupadb restore 备份和恢复应用程序数据。

这可能会对应用程序产生安全后果。 adb backup 允许启用 USB 调试的用户从设备中复制应用程序数据。备份后,用户可以读取所有应用程序数据。 adb restore 允许从用户指定的源创建应用程序数据。还原后,应用程序不应假定数据、文件权限和目录权限是由应用程序自己创建的。

设置allowBackup="false" 选择应用程序退出备份和恢复。

要修复此警告,请确定您的应用程序是否应支持备份并显式设置 android:allowBackup=(true|false)

点击这里查看More information

【讨论】:

用户通常甚至不知道什么是 adb ,如果他们知道,他们可能知道如何 root 他们的设备并自己获取数据,不是吗? @Tor 当你说“从设备复制应用程序数据”时,你的意思是从 data/data/com.myapp 还是从 sdcard 复制?前一个目录是受保护的,除非设备已root,否则无法读取。 所以为了澄清这个 Lint 引用的备份是 ADB 工具,而不是云备份服务,对吗?似乎很多其他答案都变得如此混乱。 @IgorGanapolsky 我认为使用 ADB 会复制私有数据,这就是出现警告的原因。我认为只有启用了调试功能并将他们的设备连接到 PC 的人才会受到影响。这些人通常是高级用户或开发人员,因此他们应该知道自己在做什么。安全风险是针对那些错误地执行此操作并在使用 ADB 工具进行这些操作的 PC 上安装恶意应用程序的人。有一个无需root的备份和恢复应用程序,名为“Helium”:play.google.com/store/apps/… "如果您通过 Eclipse 使用 lint.." 您可能应该迁移到 AndroidStudio,因为不推荐使用 ADT 插件。【参考方案2】:

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

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

【讨论】:

我认为 API 级别 23 的变化表明这是正确的答案。这是更改的培训文档:developer.android.com/training/backup/autosyncapi.html【参考方案3】:

这没有明确提及,但基于以下文档,我认为这暗示应用需要声明和实现 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

【讨论】:

如果应用程序没有任何与 backupAgent 相关的内容怎么办? android会自动备份它的数据吗? 正确答案在这里:***.com/a/13806946/878126。似乎与backupAgent无关。我还更新了我的问题以显示它的全部内容。【参考方案4】:

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

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

您可以阅读这篇文章以获取更多信息: Hacking Android Apps Using Backup Techniques

【讨论】:

你在 2017 年对这个答案是认真的吗?请在此处阅读developer.android.com/guide/topics/data/… 您可以通过将 android:allowBackup 设置为 false 来禁用备份。如果您的应用可以通过其他机制重新创建其状态,或者如果您的应用处理 Android 不应备份的敏感信息,您可能需要这样做。 目前您可以通过清单中的属性从备份中排除敏感数据。

以上是关于什么是“android:allowBackup”?的主要内容,如果未能解决你的问题,请参考以下文章

Attribute application@allowBackup value=(true) from AndroidManifest.xml:7:9-35

Android application backup

Android Studio 项目文件及目录详解

Android Studio 项目文件及目录详解

[Android] 强制activity的横屏与纵屏

允许使用明文本连接(非https)