我有一個網站(其基本要點描述在this question),我想有一些方法可以在用戶使用網站(即上傳和下載數據)時一直存儲用戶名和用戶信息。我應該如何管理用戶名/密碼會話信息?
現在,如果登錄成功,我將返回密碼的散列以及任何相關信息。任何時候用戶嘗試一些東西,他們的用戶名,散列等都必須與數據庫中的內容相匹配。如果用戶註銷,他們的本地Sinatra會話將刷新所有信息。
我意識到這是一種非常幼稚的做法。有沒有更好的方法來處理用戶會話信息?關於cookie的維基百科條目提到使用會話uid而不是其他信息;這種方法的優點是什麼?我懷疑這種方法也容易受到其他攻擊的影響,但是由於我對所做的所有事情都進行了驗證,所以我不確定自己打開的是什麼樣的攻擊。另外,如果/當我執行ssl時,這些事務是否會'自動'加密,還是我需要做其他事情來確保字符串受到保護,如果它們需要的話?
什麼是一個好的起始鹽值?例如,我應該讓我的數據庫從當前系統時間生成一個隨機數,然後密碼密碼哈希值,然後將其作爲會話哈希值返回?下次用戶登錄時,鹽是不同的,所以哈希是不同的,但它是持久的特定登錄? – mmr 2010-02-02 04:14:34
使用安全的隨機數生成器,如.NET中的'RNGCryptoServiceProvider'。您可以安全地將salt存儲在數據庫中,其中alnong位於known-hash。 – 2010-02-02 04:16:21