Android 共享首选项安全性

我想知道有关共享偏好安全性的问题。

是否有可能访问共享首选项,即使它们是在 MODE _ PRIV (0)中创建的?
是否可以列出所有可用的共享首选项,然后从其他应用程序获取所有设置?
共享首选项是放置敏感数据(如密码或身份验证令牌)的好地方吗?

谢谢

56928 次浏览

通常情况下,不,它们不能被其他应用程序访问,但是,你应该注意,SharedPreferences 以 XML 文件的形式存储在 /data/data/目录中,这实际上意味着 任何应用程序与 超级用户权限根深蒂固设备 可以访问你的 SharedPreference,即使它们是用 MODE_PRIV创建的

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

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

如果您担心对首选项(或应用程序编写的任何数据)的这种访问,那么需要对其进行加密。如果你真的那么担心他们,你需要弄清楚到底有多少保护措施是必要的,才能达到你所看到的风险水平。在2011年12月刚刚出版的 Android 平台的应用程序安全中有一个非常广泛的讨论(免责声明: 我是这本书的作者)。

SharedPreferences 只不过是手机/数据/数据/文件夹中的 XML 文件,所以任何在根设备上拥有超级用户特权的应用程序或用户都可以访问你的 SharedPreferences,即使它们是用 MODE _ PRIV 创建的

大家还是 有办法保护它..。 请检查这个链接。 在这里你可以存储数据优先与加密,类是自我解释和非常容易使用。

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

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

是否有可能访问共享首选项,即使它们是在 MODE _ PRIV (0)中创建的?

通过代码号。但是如果您有超级用户特权,您可以检索应用程序文件。

是否可以列出所有可用的共享首选项,然后从其他应用程序获取所有设置?

如果你是超级用户(植根设备) ,那么你可以拉应用程序的所有私有文件。

共享首选项是放置敏感数据(如密码或身份验证令牌)的好地方吗?

没有。很容易被黑。如果要在共享首选项文件中放置任何敏感数据,可以对数据进行加密并存储。您可以将加密密钥存储在 NDK/服务器中。