自new ADT preview version (version 21)以来,他们有一个新的lint警告告诉我清单文件的下一件事(在应用程序标记中):
应该明确地将android:allowBackup设置为true或false(默认情况下为true,这可能会对应用程序的数据产生一些安全隐患)
在official website中,他们写道:
一些新的检查:您必须明确决定您的应用是否允许备份和标签检查。有一个新的命令行标志用于设置库路径。编辑时增量lint分析的许多改进。
这是什么警告?什么是备份功能,以及如何使用它?
另外,为什么警告告诉我它有安全隐患?禁用此功能有哪些缺点和优点?
清单有两种备份概念:
是否允许应用程序参与备份和 恢复基础架构如果此属性设置为false,则不进行备份 或者,即使是通过a,也可以执行应用程序的恢复 全系统备份,否则会导致所有应用程序数据 通过adb保存。该属性的默认值为true。
这被认为是一个安全问题,因为人们可以通过ADB备份您的应用,然后将您应用的私有数据存入他们的PC。
但是,我认为这不是一个问题,因为大多数用户不知道什么是adb,如果他们这样做,他们也会知道如何根设备。 ADB功能仅在设备启用了调试功能时才有效,这需要用户启用它。
因此,只有将其设备连接到PC并启用调试功能的用户才会受到影响。如果他们的PC上有使用ADB工具的恶意应用程序,这可能会有问题,因为应用程序可以读取私有存储数据。
我认为Google应该在开发者类别中添加默认禁用的功能,以允许通过ADB备份和恢复应用。
实现应用程序备份代理的类的名称, BackupAgent的子类。属性值应该是完全的 限定类名(例如“com.example.project.MyBackupAgent”)。 但是,作为简写,如果名称的第一个字符是a 句点(例如,“。MyBackupAgent”),它被附加到包中 元素中指定的名称。没有默认值。该 必须指定名称。
这不是安全问题。
答案 0 :(得分:128)
对于此lint警告以及所有其他lint警告,请注意您可以获得更全面的解释,而不仅仅是单行错误消息中的内容;您无需在网上搜索更多信息。
如果您通过Eclipse使用lint,请打开lint警告视图,您可以在其中选择lint错误并查看更长的解释,或者在错误行上调用quickfix(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。
By default, this flag is set to true. When this flag is set to true,
application data can be backed up and restored by the user using adb backup
and adb restore.
This may have security consequences for an application. adb backup allows
users who have enabled USB debugging to copy application data off of the
device. Once backed up, all application data can be read by the user. adb
restore allows creation of application data from a source specified by the
user. Following a restore, applications should not assume that the data, file
permissions, and directory permissions were created by the application
itself.
Setting `allowBackup="false"` opts an application out of both backup and
restore.
To fix this warning, decide whether your application should support backup,
and explicitly set `android:allowBackup=(true|false)`"
点击此处查看More information
答案 1 :(得分:21)
以下是这种意义上的备份真正含义:
Android的备份服务允许您将持久性应用程序数据复制到远程“云”存储,以便为应用程序数据和设置提供还原点。如果用户执行恢复出厂设置或转换为新的Android设备,则系统会在重新安装应用程序时自动恢复备份数据。这样,您的用户无需重现以前的数据或应用程序设置。
〜取自http://developer.android.com/guide/topics/data/backup.html
您可以在此处注册此备份服务: https://developer.android.com/google/backup/signup.html
可以备份的数据类型是文件,数据库,sharedPreferences,缓存和lib。这些通常存储在设备的/data/data/[com.myapp]目录中,该目录是读保护的,除非您具有root权限,否则无法访问。
<强>更新强>: 您可以在BackupManager的api doc:BackupManager
上看到此标记答案 2 :(得分: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
答案 3 :(得分:4)
什么时候应该设置android:allowBackup = false
您不需要root用于将数据从Android设备备份到PC,您只需要物理访问并在开发人员菜单中启用调试。这使您可以从应用程序的内部存储中复制数据,其中可能包含您不想让某人窃取的敏感信息,例如您的Facebook访问令牌。
我同意在大多数情况下这是非常微不足道的,但有些情况需要额外的保护层来防止涉及物理访问的攻击。</ p>
请注意,为了解决此问题,您需要根据手机进行操作,在这种情况下,出厂重置时,内部存储中的敏感数据将被清除。
答案 4 :(得分:1)
隐私关注。如果应用程序包含敏感数据,建议禁止用户备份该应用程序。有权访问备份文件(即android:allowBackup="true"
时),即使在非root设备上也可以修改/读取应用程序的内容。
解决方案 - 在清单文件中使用android:allowBackup="false"
。
您可以阅读此帖子以获取更多信息: Hacking Android Apps Using Backup Techniques