2015-04-23 26 views
1

我有一個關於認證的正常過程的問題。身份驗證過程,爲什麼在數據庫中存儲sessionID?

我google有很多,看了很多,但是仍然不能很清楚的認證過程, 實際上sessionID是什麼? 爲什麼我們將sessionID存儲在數據庫中,因爲我認爲會話ID有時會過期。爲什麼我們仍然需要存儲它們? 如果我將OAuth用於android應用程序或桌面應用程序,該怎麼辦?

更多的解釋:

  1. 例如,我用表格的用戶登錄發送「username」的和「密碼」,然後我用MD5($密碼),然後發送給所有的人。到服務器URI,是嗎?

  2. 然後Server獲取userName和passWord,然後將passWord與數據庫中的passWord進行比較,如果相同,則正確。服務器將SessionId發回給用戶,cookie將被設置。這個過程是否正確?

  3. 如果是正確的,服務器會將sessionID存儲在數據庫中,但sessionId會過期一段時間,爲什麼我們將會話ID存儲在數據庫中?

+0

當您通過數據庫存儲會話處理時,則需要將該ID也存儲在數據庫中。通常會話存儲在磁盤上。 BTW不使用MD5作爲密碼的散列方法,現在它不安全。 –

+0

改爲使用MD5,請使用SHA1。我可以發佈一段代碼來使用它。告訴我,如果你需要它 – MiguelHincapieC

回答

1
  1. 當你正在處理安全數據,你應該使用SSL(HTTPS)。對密碼做MD5是毫無意義的。如果我抓住了交通,我可以用蠻力和/或彩虹桌un-MD5。 MD5不是爲了安全。它用於識別具有更小數據塊的大塊數據。

  2. 您不應將密碼存儲在數據庫中。您應該在數據庫中存儲密碼的醃製散列。然後,用戶發送密碼並散列,並查看它是否與數據庫中的內容匹配。再次,不要使用MD5。使用更好的(更長的)散列 - 並確保它是鹽漬的。

  3. 服務器需要知道哪些會話已打開並正在使用。所以,它必須存儲它們。您不需要存儲會話ID。服務器呢。會話過期時,服務器將刪除會話。

+0

很好的解釋! –

+0

謝謝大家!我對身份驗證很陌生,實際上我不知道這個過程。 – PigeonIsBigBird

+0

謝謝大家!我對認證非常陌生,實際上我不知道這個過程。 @kainaw。 1 - 如果我不使用MD5,那有什麼更好的?像SHA-256一樣? 2 - Befor我使用SSL傳輸密碼和用戶名,我是否需要加密散列數據,然後使用SSL或僅使用SSL? 3 - 我怎麼知道,哪個會話是誰。我應該使用會話ID還是?爲什麼我在登錄後看到一些網站,Cookie中有SessionID? – PigeonIsBigBird

1

例如,我用表格中登錄。用戶發送「username」的和「密碼」,然後我用MD5($密碼),然後送他們全部服務器URI,是那對嗎?

不是。 Md5是一個弱散列算法,還有其他更安全的算法。除此之外,你生產的散列應該不僅僅是

hash('whatever_algorithm', $password) 

有喜歡PHPass庫和功能,如password_hash這將有助於你更加複雜。

作爲協議,您應該使用SSL並參考https

然後Server獲取userName和passWord,然後將passWord與數據庫中的passWord進行比較,如果相同,則正確。服務器將SessionId發回給用戶,cookie將被設置。這個過程是否正確?

的過程是錯誤的,因爲你不應該保持清醒的證書數據庫中數據的,它的憑據散列應存儲,你應該嘗試使用用戶提供的用戶名+密碼複製它。 哈希是一種不對稱算法:它只能用一種方法。

您可以通過在遵循特定預期輸入/輸出交換的會話上添加一些驗證步驟來加強安全性。

如果是正確的,服務器會將sessionID存儲在數據庫中,但sessionId會過期一段時間,爲什麼我們將會話ID存儲在數據庫中?

您存儲會話ID時,它仍然活着(不超時),因此用戶仍然可以連接,無需重新驗證。 當會話返回錯誤代碼時,您將其ID保存在數據庫中,以便對相關信息進行跟蹤並能夠生成日誌。 可以,例如:

  • 在會話表中添加客戶端的IP,所以你可以跟蹤WHO
  • 加error_codes鏈接到您的會話,以便您可以跟蹤什麼
  • 添加一個日期表中看到WHEN

如果在會話過程中發生錯誤,則可能需要知道原因(有人試圖繞過您的會話安全或您實施會話時發生的錯誤)。

相關問題