2012-02-01 42 views
1

我想知道在使用ajax向认证服务器发送用户名和密码时需要记住哪些事情。我使用phoneGap和jQuery来开发一个我很新的网络应用程序,并且我想确保我以正确的方式进行操作。任何建议是受欢迎的。向认证服务器发送用户名和密码时需要考虑哪些最佳实践?

+6

我简评:使用HTTPS – 2012-02-01 00:36:06

+0

不要发送信息未编码。在传输之前使用一些方法进行编码。最好的编码类型是单向编码,因此找不到纯文本值是不可取消的。 – Jasper 2012-02-01 00:41:17

回答

1

这是您正在构建自己的应用程序,还是您要与现有的基于Web的服务通话?

使用HTTPS是必须的,假设它是可用的。如果您自己构建网站,我建议您查看基于令牌的系统,与许多热门网站使用的系统类似。

的基本流程是这样的:

  • 您,开发人员,注册与网站的API密钥和可能的某种象征。
  • 在您的应用中,您将用户的密码与应用的令牌结合起来,并通过散列算法运行它们。
  • 您的应用将散列密码和您的API密钥一起提交给服务器。
  • 如果用户的凭证签出,服务器会回复一个身份验证令牌,该令牌只是一个短代码。您的应用程序必须在向服务器发送每个请求时包含此令牌。
  • 身份验证令牌可能会在某个时间点过期,因此您可能需要在某个时间点重新验证身份。

通常,避免以纯文本形式存储用户密码。将其与服务器的身份验证系统兼容的形式散列,然后存储该值。

+0

我会将信息发送到现有的Web服务。在不使用API​​密钥的情况下,通过https散发密码是否足够? – Josh 2012-02-01 02:51:15

+0

这将取决于您将要与之通话的Web服务。他们是否有任何已发布的API文档?他们可能期待着一定的互动模式。查看[flickr API文档](http://www.flickr.com/services/api/auth.oauth.html),获取这些API通常如何工作的详细示例。这比“登录”要复杂一点。 – 2012-02-01 04:32:41

2

您应该使用质询 - 响应机制。

服务器应该向客户端发送一个不可重用的即将到期的随机数和用户的salt。
客户端应该使用salt对密码进行散列,将结果散列与随机数散列在一起,然后将该散列发送回服务器。

服务器应该在其数据库中存储预盐渍密码散列。
然后,它应该将存储的散列与随机数散列在一起,并将其与来自客户端的散列进行比较。

这使得攻击者无法学习原始密码,即使攻击者是一个活跃的中间人并且已经窃取了数据库。
但是,如果攻击者窃取数据库,他将能够绕过您的UI并使用已知的哈希来登录。

相关问题