2011-05-24 32 views
1

我知道任何嘗試實現用戶身份驗證的人的標準答案都是使用已經建好並經過測試的庫,但我一直很喜歡重新發明輪子。如何在註冊期間傳輸密碼(PHP&SQL)

我已經在PHP中創建了一個用戶認證和會話數據系統,使用challenge-response技術進行登錄。所有專用頁面在開始時都需要一個功能來驗證會話超時,IP,瀏覽器和256位令牌密鑰的會話檢查。驗證會話後,它會重置超時並生成新的令牌密鑰。

我現在看到的最大弱點是用戶註冊。我還沒寫過,但看起來我不得不從客戶端向服務器發送明文密碼或散列版本。無論哪種方式,如果數據包被捕獲,窺探只需登錄即可。

有沒有簡單的方法來加密客戶端和解密服務器端?或者也許可以用延遲和虛擬數據包的方式發送它。

此外,如果有任何其他問題,我可能錯過了,請讓我知道。

  • 登錄要求挑戰salt,並且客戶端在發送密碼之前散列密碼
    散列(散列(密碼)。salt)。
  • 要堅持一個會話,客戶端必須擁有最新的令牌密鑰和相同的瀏覽器IP到創建會話的那些IP。
  • 當然,所有用戶輸入& ajax響應在查詢之前被檢查。

回答

1

確實有一個正確答案: 使用HTTPS。 SSL over HTTP是唯一能夠完全保證安全的解決方案。

你不能在這裏做任何javascript檢查,因爲鹽會被暴露。這不是正確的方法。

+0

SSL是一種痛苦,因爲其目的是將其實施到CMS中;所以代碼將在客戶端的服務器上,所以他們不會有靜態IP和證書。我想我可以通過我的服務器路由註冊。 – Oliver 2011-05-24 21:20:07

+0

@Oliver然後他們的網站永遠都不會那麼安全,因爲沒有HTTPS,每次人們登錄他們的憑證時都會通過未加密的線路發送,並且他們會在每次請求時以未加密的方式發送其經過驗證的會話ID到服務器。那麼,爲什麼要做一個關於註冊的大事? – 2011-05-24 21:22:41

+0

javascript所使用的任何加密密鑰都可以通過查看我猜測的來源來暴露。 – Oliver 2011-05-24 21:23:11

1

有沒有簡單的方法來加密客戶端和解密服務器端?

如何使用HTTPS?