1

我正在尝试制作一个用户必须使用名称/密码组合登录的应用程序。但是,我不完全确定在哪里检查用户名/密码是否有效。

每次运行应用程序时,我是否应该在显示登录屏幕之前刷新手机上的数据库副本?或者我应该只在我验证了登录信息后才拉(通过通过 https 发送的帖子?)。

此外,我想知道在手机上存储包含用户名/密码组合的部分数据库的安全性。如果我用盐反复对密码进行哈希处理,是否有可能轻松查看用户名/密码组合?什么哈希算法是合适的?(我读过 md5 很弱,sha-1 也是如此,但也许通过反复迭代它可以减轻 sha-1 的弱点?)。

4

4 回答 4

0

如果您在用户使用登录之前或之后更新数据库取决于您的应用程序概念。我猜提供的数据仅适用于具有有效登录名的用户,因此您应该只在登录后加载/更新您的数据库。否则用户可能会下载您的应用程序,下载数据库并访问提供的可能很敏感的数据(我不知道里面存储了什么,所以您必须决定)

为什么要在手机上保存用户数据(登录)?这仅在您的应用程序在没有互联网的情况下运行时才有意义,但这意味着您的应用程序必须在每部手机上存储所有用户的登录数据。这是一个可怕的想法。

您可以使用 SHA-2 作为密码,但在大多数情况下使用盐渍 md5 应该仍然可用。

于 2012-08-24T18:37:50.287 回答
0

在更新数据库之前验证登录信息(通过某种 HTTP 方法)。如果您将任何凭据存储在手机的数据库中,那么没有登录名的人可以使用已root 的手机访问您的数据。即使您对这些值进行哈希处理,拥有根电话的人也可以更改数据库中的内容等。

带有盐的 SHA-2 是安全性的好选择。

于 2012-08-24T18:39:30.607 回答
0

几天前我做了这个过程。你有2个选择。RESTful 服务或通过 json。

我通过httppost发送一个json,然后对密码进行哈希处理并在php(服务器端)中进行身份验证

问题是当您发送 json 时,您发送的是纯文本。有一些技巧。您可以在 android 应用程序上散列您的密码并更改您的站点/数据库的整个逻辑以处理您选择的散列或通过 https 发布。我建议后者。取决于什么对你来说更容易

于 2012-08-24T18:42:43.580 回答
0

对于您问题的密码存储部分:

  • 不要简单地散列您的密码并存储它。
  • 不要只是把盐扔在那里,把它哈希并储存起来。
  • 务必使用其他人已经对其安全性进行审查的经过认证的算法来保护您的用户密码。

此类示例包括基于 Blowfish 的 bcrypt 和基于 SHA-256 等哈希算法的 PBKDF2。

security.stackexchange.com 上的这个问题涵盖了两者的所有相关细节及其权衡。

是否有安全专家推荐 bcrypt 用于密码存储?

您还可以从阅读如何安全存储密码中受益。

于 2012-08-24T18:53:39.493 回答