什么是“android:allowBackup”?

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

应该明确地将android:allowBackup设置为true或false(默认情况下是true,并且可以对应用程序的数据有一些安全性影响)

官方网站上 ,他们写道:

几个新的检查:你必须明确地决定你的应用程序是否允许备份和标签检查。 有一个新的命令行标志来设置库path。 在编辑时增加lint分析的许多改进。

这是什么警告? 什么是备份function,我如何使用它?

另外,为什么警告告诉我它有安全隐患? 禁用此function的缺点和优点是什么?


清单的备份有两个概念:

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

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

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

不过,我认为这不是问题,因为大多数用户不知道adb是什么,如果他们这样做,他们也会知道如何根设备。 ADBfunction只有在设备启用了debuggingfunction的情况下才能工作,这需要用户启用它。

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

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

  • “android: backupAgent ”允许使用云的备份和还原function,如下所示:

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

这不是一个安全问题。

对于这个lint警告以及所有其他的lint警告,请注意,您可以得到比单行错误消息中的内容更全面的解释; 你不必在网上search更多的信息。

如果您通过Eclipse使用lint,请打开lint警告视图,您可以在其中selectlint错误并查看更长的解释,或者在错误行上调用quickfix(Ctrl-1),其中一个build议是“Explain这个问题“,这也将会出现一个更全面的解释。 如果您不使用Eclipse,则可以从lint(lint –html)生成HTML报告,其中包含警告旁边的完整说明,或者可以要求lint解释特定问题。 例如,与allowBackup相关的问题的ID为“AllowBackup”(显示在错误消息的末尾),所以更完整的解释是:

$ ./lint – 显示AllowBackup

AllowBackup

简介:确保在应用程序的清单中显式设置allowBackup

优先级:3/10严重性:警告类别:安全

allowBackup属性确定是否可以备份和还原应用程序的数据。 这里logging在案。

默认情况下,这个标志被设置为true。 当此标志设置为true时,应用程序数据可以由用户使用adb backup和adb restore进行备份和恢复。

这可能对应用程序有安全后果。 adb备份允许启用USBdebugging的用户将应用程序数据从设备中复制出来。 一旦备份,所有的应用程序数据可以被用户读取。 adb restore允许从用户指定的源创build应用程序数据。 还原之后,应用程序不应该认为数据,文件权限和目录权限是由应用程序本身创build的。

设置allowBackup="false"备份和恢复中select一个应用程序。

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

点击这里获取更多信息

这就是这个意义上的备份真正的含义:

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

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

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

可以备份的数据types是文件,数据库,sharedPreferences,caching和lib。 这些通常存储在设备的/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 /引导/主题/数据/ backup.html

什么时候应该设置android:allowBackup = false

您不需要root用户将数据从android设备备份到PC,您只需要物理访问并在开发者菜单中启用debugging。 这使您可以从应用程序的内部存储中复制数据,这些数据可能包含您不想让别人盗取的敏感信息,如您的Facebook访问令牌。

我同意在大多数情况下这是相当微不足道的,但也有一些情况下需要额外的一层保护来抵御涉及物理访问的攻击。

请注意,为了解决这个问题,您需要对手机进行根目录,在这种情况下,出厂重置时内部存储器中的敏感数据将被清除。

build议禁止用户备份应用程序,如果它包含敏感数据。 有权访问备份文件,可以修改非根设备上的应用程序的内容。

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

http://resources.infosecinstitute.com/android-hacking-security-part-15-hacking-android-apps-using-backup-techniques/