共享用户ID:应用程序已在市场上,更改是否安全?

19
下一版本的应用程序中,我想更改sharedUserId,因为我们现在使用一个内部控制仪表板应用程序,该应用程序必须写入其他应用程序的设置文件。但由于该应用已经安装在许多手机上,这会成为问题吗?我在模拟器上进行了一些测试,并且在设备日志中看到了异常情况,即不能写入首选项文件的*.bak版本。不确定这有多重要。有趣的是,即使使用另一个Linux用户ID创建了shared_prefs文件夹,保存设置仍然似乎可以工作。是否有人尝试过这样做?

好的,看起来这将是不可能的,真糟糕。当尝试访问使用应用程序早期版本创建的数据库文件时,它会崩溃,因为该版本没有设置自定义用户ID。默认用户ID是什么?第二个应用程序是否可以将其用户ID设置为第一个应用程序的默认用户ID? - mxk
2个回答

28

我再次回答自己的问题:

不安全。因为通过Android市场更新应用程序不会删除数据库和首选项文件,新版本将无法读取或写入这些文件(因为它们是在不同的Linux用户ID下创建的),并且应用程序将在更新后崩溃。你必须要求用户完全卸载并重新安装应用程序,这显然是不推荐的。

从这个总的规则来说,我得出结论: 每当你开始开发一个新应用程序时,请确保设置手动android:processandroid:sharedUserId属性!如果你不需要它,它不会有任何影响,但它可以让你完全控制哪些应用程序可以访问该应用程序的私有资源。


2
谢谢您发布这个,我差点就发布了一个sharedUserId的更新..可惜我们在创建应用程序时从未学过这个:/ - Paulo Cesar
对于那些没有提前计划的人,这个问题有解决方案吗? - Barry Fruitman
1
@BarryFruitman 如果不会丢失用户数据的话,您可以使用具有不同名称的新文件。由于 Android 的一个错误导致我们的文件在某些设备上无法访问,因此我们曾经不得不这样做。 - Oderik
一个更简单的解决方案是不使用android:process(用户不友好)或android:sharedUserId(无意义,存在更好地通过IPC和“signature”级别的权限来解决问题)。 - CommonsWare
如果我尝试使用不同的sharedUserId更新应用程序,它甚至无法安装。安装错误:INSTALL_FAILED_UID_CHANGED。 - Mark
显示剩余2条评论

2

问题在于,这不是一个错误,而是一个特性。如果没有指定共享用户ID,Android(或底层的Linux)将为您分配一个。一旦您设置了一个,它就会因定义而异。由于在任何Linux系统上,除非被授权,否则一个用户无法访问另一个用户的文件,因此这几乎是预期的行为。 - mxk
事实上是真的,但所提到的漏洞是Android操作系统无法识别已分配/更改的sharedId并相应地更新已安装应用程序数据的权限。 - Will Kru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接