从new ADT preview version (version 21)开始,他们有了一个新的lint警告,告诉我清单文件(在application标记中)的下一个内容:
应显式将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”),则它将追加到元素中指定的包名称。没有默认值。必须指定名称。
这不是安全问题。
5条答案
按热度按时间pgx2nnw81#
对于这个lint警告,和所有其他lint警告一样,请注意,您可以得到比仅仅一行错误消息中的内容更全面的解释;你不必在网上搜索更多信息。
如果通过Eclipse使用lint,可以打开lint警告视图,在其中选择lint错误并查看更详细的解释,也可以调用快速修复(Ctrl-1)在错误行上,而其中一个建议是“解释这个问题”,它也会弹出更全面的解释,如果您不是在使用Eclipse,可以从lint生成HTML报告(
lint --html <filename>
),它在警告旁边包含完整的解释,或者您可以要求lint解释特定的问题。与allowBackup
相关的问题具有idAllowBackup
(显示在错误消息的末尾),因此更完整的解释是:allowBackup
属性确定是否可以备份和恢复应用程序的数据,如此处所述。默认情况下,此标记设置为
true
。当此标记设置为true
时,用户可以使用adb backup
和adb restore
备份和还原应用程序数据。这可能会对应用程序产生安全后果。
adb backup
允许已启用USB调试的用户从设备复制应用程序数据。备份后,用户可以读取所有应用程序数据。adb restore
允许从用户指定的源创建应用程序数据。还原后,应用程序不应假定数据、文件权限并且目录许可由应用程序本身创建。设置
allowBackup="false"
会使应用程序退出备份和恢复。要修复此警告,请确定应用程序是否应支持备份并显式设置
android:allowBackup=(true|false)
点击这里了解更多信息
zyfwsgd62#
以下是备份在此意义上的真正含义:
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权限,否则无法访问。
UPDATE:您可以在BackupManager的API文档中看到此标记:备份管理器
0s7z1bwu3#
虽然没有明确提到这一点,但根据以下文档,我认为这暗示了应用需要声明并实现BackupAgent才能进行数据备份,即使allowBackup设置为true(默认值)也是如此。
http://developer.android.com/reference/android/R.attr.html#allowBackup 网站
1cosmwyk4#
这涉及到隐私问题。建议禁止用户备份包含敏感数据的应用。如果用户可以访问备份文件(即
android:allowBackup="true"
),则即使在非根设备上也可以修改/读取应用的内容。解决方案-在清单文件中使用
android:allowBackup="false"
。您可以阅读这篇文章以获得更多信息:Hacking Android Apps Using Backup Techniques
ehxuflar5#
在这里你可以看到android官方文档
https://developer.android.com/reference/android/R.attr#allowBackup