我想知道在使用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