在Android中存储用户登录凭据的最佳位置

ojo*_*ifu 11 google-app-engine android

我正在创建一个Android应用程序,我不能(?)找到有关在Google App Engine上验证应用程序用户的任何信息(不使用用户的Google帐户).在Android设备上存储用户名和密码是一种很好的做法.然后将应用程序使用的数据存储在Google App Engine上?

leR*_*bot 38

你不应该使用SharedPreferences,尽管谷歌会告诉你他们是多么安全,因为一个简单的事实是,权力和想要权力的用户普遍存在生根习惯.

在有根的系统中,授权的应用程序将能够访问内部存储/系统分区,从而访问根存储的加密XML文件,其中Android存储SharedPreferences,这对于ROOT-AUTHORIZED APPS来说是明确的.因此,如果受感染的手机碰巧有一个存储此类数据的应用程序,并且用户习惯滥用相同的电子邮件/密码来处理不同的服务,那么攻击向量很容易损害多个服务的凭据,尽管用户在解除警告时会提出任何警告.根植他的手机或给应用程序这样的权限,因为,那些警告只是不够清楚.

替代方案是使用自定义,可变种子,盐渍算法对凭证的持久存储进行手动加密.secure-preferences lib是一个很好的选择,几乎可以透明地为您完成所有事情,还有实现Android的SharedPreferences接口的额外好处,保留默认spref的大多数功能,只需稍加调整(查看他们的示例).

2016年编辑:我觉得我需要在2016年再回到这个问题并添加一个很好的参考苹果与FBI的戏剧来改变圣贝纳迪诺袭击者手机中的操作系统.所以,想象一下你的手机很容易上传,就像大多数Android一样,甚至可能默认为root,也不需要将数据擦除到root.如果他们不想获得您的凭据,FBI不需要谷歌或贵公司提出任何要求.通过使用诸如安全首选项之类的东西,您可以通过仅使您自己的系统(在这种情况下,您的应用程序)能够访问这些凭据来承担Apple决定承担的相同类型的责任.如果他们愿意,你会被FBI烦恼,但让你的用户感觉你,而不是底层操作系统,是唯一直接控制这些凭据的权威,这是我宁愿在我的产品中使用的东西.

  • 我会说'SharedPreferences`是一个很好的起点.如果应用程序将要发布**,加密它们是必须的. (6认同)
  • 我的情况与您的情况完全相同(内部应用程序,但适用于智能手机),经理注意到了。他们决定做你期望管理者不要做的事情:扎根并直接使用 XML。他们提交了一个高优先级的错误,没有添加密码保存功能,我必须加密首选项,然后添加一个在用户体验中完全没有意义的功能(每次更新都询问密码),因为他们感到生态系统存在危险。我最终得到了三倍的工作量和混乱的用户体验。我不干你 (2认同)