我正在创建一个Android应用,其中首次使用时将进行电话号码验证(与Whatsapp中的相同)。当电话号码成功验证后,我想以这样一种方式存储号码,使其无法被用户更改/更改。默认情况下,Android中的数据(SQLlite)以文本格式存储在存储中,可由用户编辑。我想消除这个缺点。我应该使用SQLCipher进行存储吗?还是有其他方式存储它? 或者是否有人知道Whatsapp使用哪种技术来存储此类敏感信息?
答案 0 :(得分:0)
> data in Android is stored .. on the storage, which can be edited by the user.
大多数用户永远不会尝试(甚至不知道)这样的举动。
您可以通过abd或DDMS从具有root设备或高级用户(通常是开发人员)的用户那里遇到此类行为,但坦率地说,在7年的Android开发中,我从未遇到过“天真”的用户修改应用程序数据库。
但是,您应该为黑客试图访问/修改用户的私人数据和最佳工具做好准备 我知道保护您的数据库免受此类攻击SqlCipher。对于非数据库机密数据存储,请确保在手动编码加密机制之前阅读this。
答案 1 :(得分:0)
从the Android Security Tips article逐字引言:
默认情况下,您在internal storage上创建的文件只能由您的应用访问。此保护由Android实现,足以满足大多数应用程序的需要。
您通常应避免对IPC文件使用MODE_WORLD_WRITEABLE
或MODE_WORLD_READABLE
模式,因为它们不能限制对特定应用程序的数据访问,也不提供对数据格式的任何控制。如果您想与其他应用程序进程共享数据,您可以考虑使用content provider,它为其他应用程序提供读写权限,并可根据具体情况进行动态权限授予。
要为敏感数据提供额外保护,您可以选择使用应用程序无法直接访问的密钥加密本地文件。例如,密钥可以放在KeyStore
中,并使用未存储在设备上的用户密码进行保护。虽然这不能保护数据免受可以监控用户输入密码的根损害,但它可以在没有file system encryption的情况下为丢失的设备提供保护。
另请注意,在external storage上创建的文件(如SD卡)是全局可读写的。由于外部存储可以由用户删除并且也可以由任何应用程序修改,因此您不应使用外部存储来存储敏感信息。
最后,this SO question (Android Secure Storage)可能会让您感兴趣。