Android SharedPreference安全性

我想知道共享偏好安全。

是否有可能获得对共享首选项的访问,即使它们是在MODE_PRIV(0)中创build的?
是否有可能列出所有可用的共享首选项,然后从其他应用程序获取所有设置?
sharedpreferences是放置敏感数据的好地方,例如密码或授权令牌?

谢谢

共享首选项作为文件存储在设备上的文件系统中。 默认情况下,它们存储在应用程序的数据目录中,文件系统权限设置为只允许运行特定应用程序的UID访问它们。 所以,Linux文件权限限制对它们的访问,就像在任何Linux / Unix系统上一样,它们是私有的。

任何具有根级别访问权的设备都能够看到它们,因为root可以访问文件系统上的所有内容。 而且,任何运行与创build应用程序相同的UID的应用程序将能够访问它们(这通常不会完成,你需要采取特定的行动,使两个应用程序运行相同的UID,所以这可能不是一个大关心)。 最后,如果有人能够在不使用已安装的Android操作系统的情况下装载设备的文件系统,则也可以绕过限制访问的权限。

如果您担心对您的偏好设置(或者您的应用程序编写的任何数据)的访问,那么您将需要对其进行encryption。 如果你关心他们,你将需要弄清楚你所看到的风险水平到底需要多less保护。 在2011年12月刚刚发布的Android平台应用程序安全性方面有一个非常广泛的讨论(免责声明:我是本书的作者)。

SharedPreferences只不过是在你的手机/数据/数据/文件夹中的XML文件,所以任何具有超级用户权限的应用程序或用户都可以访问你的SharedPreferences,即使它们是用MODE_PRIV创build的

仍然有一种方法来保护它免受每个人…请检查这个链接。 在这里你可以将数据存储在prefencryption,这个类是自我解释和非常容易使用。

https://github.com/sveinungkb/encrypted-userprefs

正如别人所说,任何人都可以访问它,但在这种情况下,没有人可以读取其中的数据,因为它是encryption的。 所以它的安全性。对于最高安全性,我的build议是在运行时生成用于encryption的密钥,而不是对其进行硬编码。 有很多方法可以做到:)

通常情况下,不能,其他应用程序不能访问它们,但是应该注意,SharedPreferences作为XML文件存储在/data/data/目录中,这意味着任何具有超级用户权限的应用程序都可以访问SharedPreference s,即使它们是用MODE_PRIV创build的