2014-01-19 72 views
2

在閱讀this和所有相關的問題後,我仍然有一個問題。
我試圖用「記住我」功能來實現登錄表單。早些時候,我一直在使用一個cookie(只包含一個哈希用戶名,沒有密碼)來驗證用戶是否已經登錄,但我讀過這不太安全,因此我決定只使用會話。
在開始的時候一切正常需要:PHP:一種安全的方式來保持登錄信息

$expires=isset($_POST['rememberMe'])? time()+(60*60*24*14): 0; 
session_set_cookie_params($expires, "/", ".example.com", false, true); 
session_start(); 

但我希望他們能如果「記住我」設置爲直接打開頁面(如http://example.com/blog)。很明顯,我做了一個session_start()並重定向到登錄頁面,如果用戶沒有登錄。但是,在這一點上,我不能正確地做session_set_cookie_params(),因爲我不知道他/她是否早先設置了「記住我」或不。如果我仍然把它放入cookie中,它會安全嗎?或者我應該修改我的數據庫來做到這一點?
還有一件事:安全會話數據(沒有密碼,再次!),如用戶名,權限等兩週?

回答

1

如果您在數據庫中正確存儲了一個隨機生成的密鑰,我看不到這是不安全的。

您應該生成一個隨機密鑰,將其存儲在您的數據庫中,然後註冊一個cookie。當用戶請求時,他會將該cookie發送給您,這將驗證數據庫中的密鑰,並在沒有問題的情況下提供訪問權限。

請記住,會話的基本機制實際上使用cookie。如果您認爲「記住我」計劃不安全,您的整個會話系統就有缺陷,您的會話cookie也存在竊取您的「記住我」cookie的危險。

+0

所以你認爲在cookie中存儲哈希用戶名是安全的,對嗎? –

+0

我編輯了系統的簡要說明。只有散列用戶名是非常糟糕的,因爲散列總是相同的。你應該生成一個隨機密鑰。 – xrash