我想知道在使用ajax向认证服务器发送用户名和密码时需要记住哪些事情。我使用phoneGap和jQuery来开发一个我很新的网络应用程序,并且我想确保我以正确的方式进行操作。任何建议是受欢迎的。向认证服务器发送用户名和密码时需要考虑哪些最佳实践?
回答
这是您正在构建自己的应用程序,还是您要与现有的基于Web的服务通话?
使用HTTPS是必须的,假设它是可用的。如果您自己构建网站,我建议您查看基于令牌的系统,与许多热门网站使用的系统类似。
的基本流程是这样的:
- 您,开发人员,注册与网站的API密钥和可能的某种象征。
- 在您的应用中,您将用户的密码与应用的令牌结合起来,并通过散列算法运行它们。
- 您的应用将散列密码和您的API密钥一起提交给服务器。
- 如果用户的凭证签出,服务器会回复一个身份验证令牌,该令牌只是一个短代码。您的应用程序必须在向服务器发送每个请求时包含此令牌。
- 身份验证令牌可能会在某个时间点过期,因此您可能需要在某个时间点重新验证身份。
通常,避免以纯文本形式存储用户密码。将其与服务器的身份验证系统兼容的形式散列,然后存储该值。
我会将信息发送到现有的Web服务。在不使用API密钥的情况下,通过https散发密码是否足够? – Josh 2012-02-01 02:51:15
这将取决于您将要与之通话的Web服务。他们是否有任何已发布的API文档?他们可能期待着一定的互动模式。查看[flickr API文档](http://www.flickr.com/services/api/auth.oauth.html),获取这些API通常如何工作的详细示例。这比“登录”要复杂一点。 – 2012-02-01 04:32:41
您应该使用质询 - 响应机制。
服务器应该向客户端发送一个不可重用的即将到期的随机数和用户的salt。
客户端应该使用salt对密码进行散列,将结果散列与随机数散列在一起,然后将该散列发送回服务器。
服务器应该在其数据库中存储预盐渍密码散列。
然后,它应该将存储的散列与随机数散列在一起,并将其与来自客户端的散列进行比较。
这使得攻击者无法学习原始密码,即使攻击者是一个活跃的中间人并且已经窃取了数据库。
但是,如果攻击者窃取数据库,他将能够绕过您的UI并使用已知的哈希来登录。
我已经使用了Raymond的例子。另外我在客户端散列密码。
http://www.raymondcamden.com/index.cfm/2011/11/10/Example-of-serverbased-login-with-PhoneGap
- 1. API密钥认证和用户认证最佳实践
- 2. 在开发IMAP客户端时需要考虑哪些RFC?
- 3. 在开发SMTP客户端时需要考虑哪些RFC?
- 4. 在开发POP3客户端时需要考虑哪些RFC?
- 5. WCF UserNameOverTransport最佳实践,以存储用户名和密码
- 6. 需要一些最佳实践意见
- 7. Lucene和SQL服务器 - 最佳实践
- 8. 从应用程序向服务器发送用户名和密码的最佳做法
- 9. 实施IDisposable时需要考虑哪些风险?
- 10. Web服务用户认证和会话管理的最佳实践
- 11. 需要帮助从服务器获取用户名和密码
- 12. 在__服务器_ip_需要用户名和密码
- 13. 编码时我需要考虑哪些安全问题?
- 14. 客户端/服务器用户名/密码认证
- 15. 服务器http:/ localhost:8080需要用户名和密码。服务器说:XDB
- 16. 最佳实践 - 如何实现具有多个服务的用户认证层?
- 17. 角(2)服务器端表单验证(和最佳实践)
- 18. 最佳实践:AmazonS3服务
- 19. 使用HTML5shiv时需要考虑哪些问题?
- 20. 需要在运行时获取weblogic服务器的用户名和密码
- 21. 当我运行网站时,服务器localhost:80需要用户名和密码。
- 22. TCP服务器和客户端C#最佳实践
- 23. 账户用户名的最佳实践?
- 24. 使用用户名和密码将C#发送给Cassandra服务
- 25. Web服务器最佳实践
- 26. 服务器端异步最佳实践
- 27. WCF Web服务需要访问用户名和密码信息
- 28. 使用WCF Web服务时的最佳实践身份验证
- 29. 我如何要求URL的服务器需要用户名和密码
- 30. 最佳实践:Silverlight客户端和a.Net服务器之间的身份验证
我简评:使用HTTPS – 2012-02-01 00:36:06
不要发送信息未编码。在传输之前使用一些方法进行编码。最好的编码类型是单向编码,因此找不到纯文本值是不可取消的。 – Jasper 2012-02-01 00:41:17