2011-11-17 68 views
13

我正在写1)一个在AccountManager中存储用户名和密码的应用程序,以及2)一个单独的后台服务应用程序,它访问这些凭据以登录到我的服务器等。玩这个游戏,我发现我可以从服务(应用程序2)调用AccountManager.getPassword(帐户),以访问使用其他应用程序(应用程序1)添加到AccountManager的帐户类型。什么保护Android AccountManager密码不被其他应用读取?

由于这个原因,我开始想知道是什么阻止了1)中的任意恶意应用程序,包括清单中的字段具有帐户管理权限,然后2)遍历特定类型的所有帐户,调用他们的mAccountManger.getPassword(帐户)。我知道在安装过程中会弹出一个对话框,其中包含应用程序请求使用的所有权限,但我不认为我们可以指望普通用户拒绝某个应用程序,因为它请求了可疑权限。

有没有办法防止在帐户类型上调用getPassword?有没有办法保护账户管理器中的帐户免受已给予他们大量帐户权限的应用程序?

回答

9

帐户数据保护基于发出请求的进程的Linux用户标识(UID)。 (请参阅指南中的Security and Permissions。)每个帐户都与帐户验证程序(具有UID)相关联,并且调用getPassword(或其他几个方法)的过程必须具有与验证程序相同的UID。