在向身份验证服务器发送用户名和密码时,需要考虑哪些最佳做法?

时间:2012-02-01 00:33:37

标签: jquery jquery-mobile cordova

我想知道在使用ajax向身份验证服务器发送用户名和密码时需要记住哪些事情。我正在使用phoneGap和jQuery来开发一个我非常新的网络应用程序,我想确保以正确的方式进行操作。欢迎任何建议。

3 个答案:

答案 0 :(得分:2)

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

服务器应该向客户端发送一个不可重用的过期nonce和用户的salt 客户端应使用salt对密码进行哈希处理,使用nonce对生成的哈希进行哈希处理,然后将该哈希值发送回服务器。

服务器应在其数据库中存储预先存在的密码哈希值 然后它应该使用nonce散列存储的散列,并将其与客户端的散列进行比较。

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

答案 1 :(得分:1)

这是您自己构建的应用,还是您要与现有的基于网络的服务进行对话?

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

基本流程如下:

  • 您,开发人员,在网站上注册API密钥,可能还有某种代币。
  • 在您的应用中,您将用户的密码与应用的令牌合并,并通过散列算法运行它们。
  • 您的应用会将散列密码和API密钥一起提交给服务器。
  • 如果用户的凭据签出,服务器将回复一个身份验证令牌,这只是一个简短的代码。您的应用必须在每次向服务器发出请求时都包含此令牌。
  • 身份验证令牌可能会在某个时候到期,因此您可能需要在某个时候重新进行身份验证。

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

答案 2 :(得分:0)

我使用过Raymond的例子。我也在客户端哈希密码。

http://www.raymondcamden.com/index.cfm/2011/11/10/Example-of-serverbased-login-with-PhoneGap