ChatGPT解决这个技术问题 Extra ChatGPT

什么是“android:allowBackup”?

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”),则会将其附加到元素中指定的包名称中。没有默认值。必须指定名称。

这不是安全问题。

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

z
zeroDivider

对于此 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


用户通常甚至不知道什么是 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 插件。
I
IgorGanapolsky

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

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
Y
Yuntao

这没有明确提及,但基于以下文档,我认为这意味着应用程序需要声明和实现 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会自动备份它的数据吗?
正确答案在这里:stackoverflow.com/a/13806946/878126。似乎与backupAgent无关。我还更新了我的问题以显示它的全部内容。
A
Ayaz Alifov

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

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

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


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