我想知道共享首选项的安全性。
即使共享首选项是在MODE_PRIV(0)中创建的,也可以访问共享首选项吗?
是否可以列出所有可用的共享首选项,然后从其他应用程序获取所有设置?
sharedpreferences是放置敏感数据(例如密码或身份验证令牌)的好地方吗?
谢谢
我想知道共享首选项的安全性。
即使共享首选项是在MODE_PRIV(0)中创建的,也可以访问共享首选项吗?
是否可以列出所有可用的共享首选项,然后从其他应用程序获取所有设置?
sharedpreferences是放置敏感数据(例如密码或身份验证令牌)的好地方吗?
谢谢
Answers:
共享首选项以文件形式存储在设备上的文件系统中。默认情况下,它们存储在应用程序的数据目录中,并且已设置文件系统权限,该权限仅允许运行特定应用程序的UID访问它们。因此,它们是私有的,就像Linux文件许可权限制对它们的访问一样,与在任何Linux / Unix系统上一样。
具有root级访问权限的任何人都可以看到它们,因为root可以访问文件系统上的所有内容。同样,任何运行与正在创建的应用程序具有相同UID的应用程序都可以访问它们(通常不这样做,您需要采取特定措施使两个应用程序以相同的UID运行,所以这可能并不大关心)。最后,如果某人能够在不使用已安装的Android OS的情况下挂载设备的文件系统,则他们还可以绕过限制访问权限的权限。
如果您担心对首选项(或应用程序编写的任何数据)的这种访问方式,则需要对其进行加密。如果您担心它们,那么您将需要准确确定为看到的风险水平需要多少保护。刚刚在2011年12月发布的Android平台应用安全中对此进行了非常广泛的讨论(免责声明:我是本书的作者)。
SharedPreferences只不过是电话/ data / data /文件夹中的XML文件,因此,即使具有MODE_PRIV的超级用户特权,在已root用户的设备上的任何应用程序或用户都可以访问您的SharedPreferences
仍然有一种方法可以保护所有人免遭攻击 ...请查看此链接。在这里,您可以使用加密将数据存储在首选项中,该类易于说明并且非常易于使用。
https://github.com/sveinungkb/encrypted-userprefs
正如其他人所说,任何人都可以访问它,但是在这种情况下,由于加密,因此任何人都无法读取其中的数据。因此,它secure.For 至上安全我的建议将是在运行时生成,而不是硬编码它用于加密的密钥。有很多方法可以做到这一点:)
SharedPref
。但是,然后如何处理另一个键?严重的是,最好的方案是使用SSL将加密的密钥和设备UID发送到服务器,以存储在服务器上并根据需要进行检索。这将需要连接,但将使您可以将设备列入黑名单,并突然将所有数据删除。没有持续的互联网连接,任何加密数据的尝试都不是100%安全的。
即使它们是在MODE_PRIV(0)中创建的,也可以访问共享首选项吗?
通过代码编号。但是,如果您具有超级用户特权,则可以检索应用程序文件。
是否可以列出所有可用的共享首选项,然后从其他应用程序获取所有设置?
如果您是超级用户(具有root用户权限的设备),则可以提取该应用程序的所有私有文件。
sharedpreferences是放置敏感数据(例如密码或身份验证令牌)的好地方吗?
不,它很容易被黑客入侵。如果要将任何敏感数据放入共享的首选项文件中,则可以加密数据并存储。您可以将加密密钥存储在NDK /服务器中。