如何在數據庫中安全地存儲用戶名,而不直接將它們添加到cookie值?PHP&MySQL用戶名存儲和cookie
實施例: 我想顯示登錄的用戶的用戶名。 如果他早點關閉了瀏覽器,唯一的方法就是使用$ _COOKIE ['cookie name'] ,其中cookie值與數據庫中的用戶名鏈接。 所以我不需要散列用戶名。
是不是?如果它是正確的,它是否安全?
如何在數據庫中安全地存儲用戶名,而不直接將它們添加到cookie值?PHP&MySQL用戶名存儲和cookie
實施例: 我想顯示登錄的用戶的用戶名。 如果他早點關閉了瀏覽器,唯一的方法就是使用$ _COOKIE ['cookie name'] ,其中cookie值與數據庫中的用戶名鏈接。 所以我不需要散列用戶名。
是不是?如果它是正確的,它是否安全?
下面是假設你是談論使用cookie的持久登錄功能。爲了記住用戶名(但不是自動簽名),在cookie中有一個用戶名(可選擇編碼)應該沒問題。無論如何,密碼不應該在cookie中。
餅乾不應該直接識別,即用戶ID /名字不應出現在cookie。相反,您應該爲表中的用戶分配足夠長的足夠長的字符串和隨機數據,並將其存儲在cookie值中。一旦使用,你應該更新字符串併發出另一個cookie。
例如:
john | ewojroj1234ojqewor
jack | ljqwelkn1k31n23k33
第二列將被放置在該cookie。以後你會查詢該值對用戶表和:
更改密碼和簽名out也應該導致用戶令牌字符串的改變。
爲了進一步閱讀,Barry Jaspan在這個方法上寫了一個good article。
這是安全的。只是不要在客戶端(瀏覽器)上存儲密碼。也不要將密碼發送到瀏覽器。
要做到這一點,最好的方法是將用戶表的user_id(唯一標識主鍵)存儲在$ _COOKIE或$ _SESSION變量中 - 可能在$ _COOKIE ['user_id']中。
然後在每個頁面加載時,您可以使用該ID從數據庫中檢索您希望的任何用戶信息。例如(請注意,這是概念上的/只僞代碼,當然你會消毒/清潔/驗證/綁定$ _COOKIE或$ _SESSION數據參數第一。):
SELECT * FROM user_table WHERE user_id = $_COOKIE['user_id']
您可以將用戶名存儲在cookie中,只要您沒有在那裏保存密碼,這是安全的。
您也可以在那裏保存用戶ID,那麼它不會放棄任何驗證細節,同時讓您找到正確的用戶。使用sessions
。存儲在$_SESSION
中的數據存儲在服務器上,而不是在客戶端上。
用戶登錄後每次生成第二列的最佳方式是? – treng
我假定存儲cookie的使用是爲了讓用戶在稍後階段重新打開瀏覽器,輸入密碼並進行身份驗證。這需要這些混亂的字符(以識別用戶)以及發送到服務器的密碼。如何知道用戶名的不同之處在於知道這些混亂的字符使它更安全? –
@EdHeal @EdHeal在推薦的情況下,我認爲OP需要一個持久登錄功能(即沒有密碼) –