2012-02-01 41 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並使用已知的哈希來登錄。

相關問題