2011-09-08 95 views
0

我使用Cookie來記住我的功能。如何保護Cookie?

這是我如何設置Cookie:

$value = $dbusername.'|'.$dbpassword; 
setcookie('abc', $value,time()+60*60*24*180, '/'); 

檢索的cookie:

$cookie = $_COOKIE['abc']; 
$values = explode("|", $cookie); 
$username_ck = $values[0]; //ck stands for cookie 
$password_ck = $values[1]; 

什麼是保護我的cookies(用戶名/密碼)的好辦法? 我的數據庫中的密碼以純文本格式存儲。我不想在db中加密密碼。

+2

你在用什麼?爲什麼不會議?存儲明文密碼始終是一個糟糕的主意,在cookie中更是如此! – deceze

+1

我只有一個評論,永遠不要做所有上述! – Bassem

+0

我已經有會話...以上是爲了記住我。 – user311509

回答

3

首先你應該永遠不要將密碼存儲在純文本數據庫中!

第二:你永遠不應該在cookie中以純文本存儲密碼!第三:如果你使用cookie來實現像記住我這樣的選項,你不需要在cookie中存儲密碼,而是存儲在db和cookie中的隨機令牌每次都會自動失效用戶登錄並且每次用戶登錄時都會創建一個新文件。

我也已經提到過永遠不會在明文存儲密碼

編輯

也請結帳:http://jaspan.com/improved_persistent_login_cookie_best_practice

其中描述了使用Cookie的最佳方式(基本上是什麼,我已經嘗試過告訴你一步一步的解釋)。我說,最好的辦法,因爲我暫時還沒有發現更好的辦法:)

1

您不應該將密碼存儲在cookie中,因爲它將它們顯示爲純文本。如果黑客捕獲該cookie並打開並找到密碼,那麼他們找到用戶名只是時間問題。

壞習慣店一切你在一個數據庫需要,並開始使用$ _SESSION []

0

你真的應該加密密碼。至少使用md5,如果你想比較用戶的輸入與數據庫中的值,只需加密該輸入並進行比較...

還有一件事,你不應該在密碼中存儲密碼曲奇餅。

3

你永遠不應該,永遠,永遠,永遠存儲在您的數據庫中的明文密碼。只需谷歌'在數據庫中的明文密碼'來找出原因。您的密碼應該作爲(至少)SHA1哈希以及隨機鹽存儲在數據庫中。

你無法保護你的cookie的方式,你這樣做。如果不是更糟糕的話,你應該開放自己的跨站請求僞造。您還應該生成一個安全的隨機哈希來簽名cookie(如果不加密它),以確保其有效性。但是沒有任何相關的密碼最終會在cookie中結束;如果您需要將會話中的私人數據存儲起來(您應該避免這種情況),您應該將會話存儲在數據庫或memcache中。

我只是試圖有幫助,但這種會話維護方法已超越瘋狂。請,請重新考慮。

0

添加在user表名爲remember_key VARCHAR 32

場當用戶登錄該集合在用戶表:

$remember = md5(uniqid(mt_rand(), true)); 

更新查詢:

"UPDATE user SET remember_key = $remember WHERE id = $id"

當用戶重新輸入頁面查詢該cookie在user表:

"SELECT * from user WHERE remember_key = " . esc($_COOKIE['remember'])

if ($num_rows == 1) $login = true;

對不起僞代碼,同時也不要忘了逃避串

我會更新的答案

+0

如果黑客竊取cookie並將他的瀏覽器放入臨時文件夾,該怎麼辦!只要進入該網站,黑客就可以輕鬆訪問。 – user311509

+0

@ user311509:如果黑客可以竊取cookie,則會有更大的問題。由於黑客必須能夠訪問您的機器。 – PeeHaa

+0

@ user311509如果您將使用此腳本[cookies-remember-me](http://www.webdesign.org/web-programming/php/cookies-remember-me.9107.html)我很確定您會被黑客入侵 – tttony

0

我相信你應該替換整個代碼說實話,對會議進行一些研究。 我說的原因是因爲;

首先,您的會話已經安全。會話所做的是在用戶計算機上放置一個帶有令牌的cookie,並將其餘數據存儲在服務器上。所以你不一定需要加密密碼和用戶名,但你仍然可以有一些實力。

其次,跨多個IP的人不能複製會話,因爲他們是通過計算機名稱和其他簡單的東西進行檢查以確保真實性。

第三,會話比cookie快得多。每次加載頁面時,瀏覽器都必須將所有cookie發送到服務器。這可以安靜很多的記憶。會話只有一個cookie。

存儲會話數據,你可以做到以下幾點:

session_start(); //Has to go at the top of your page! On each page that uses a session. 
$_SESSION['USERNAME'] = $dbusername; 
$_SESSION['PASSWORD'] = $dbpassword; 

//And to retrieve you just call back the parameter. 
$username = $_SESSION['USERNAME']; 

結帳PHP手冊以獲取更多信息。 http://www.php.net/manual/en/session.examples.basic.php