簡體   English   中英

我如何獲得Cookie?

[英]How Can I Secure the 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];

保護我的Cookie(用戶名/密碼)的一種好方法是什么? 我數據庫中的密碼以純文本格式存儲。 我不想加密db中的密碼。

您永遠,永遠,永遠,永遠都不應在數據庫中存儲純文本密碼。 只需在Google“數據庫中的純文本密碼”中查找原因即可。 您的密碼應(至少)作為SHA1散列以及隨機鹽存儲在數據庫中。

您無法按照自己的方式保護Cookie。 您甚至可以跨站點請求偽造,甚至更糟。 您還應該生成一個安全的隨機散列來對cookie進行簽名(如果不對其進行加密),以便可以確保其有效性。 但是,與Cookie相關的任何密碼都不應最終出現在Cookie中; 如果需要在會話中存儲私有數據(無論如何應避免),則應將會話存儲在數據庫或內存緩存中。

我只是想提供幫助,但是這種會話維護方法非常瘋狂。 請,請,請重新考慮。

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

第二:永遠不要將純文本密碼存儲在Cookie中!

第三:如果您使用Cookie來實現類似“記住我”的選項,則無需將密碼存儲在Cookie中,而是將隨機令牌存儲在db和Cookie中,每次用戶登錄時該令牌都會自動失效並在用戶每次登錄時創建一個新的。

我也已經提到過“ 從不在純文本中存儲密碼”嗎?

編輯

請同時結帳: http : //jaspan.com/improved_persistent_login_cookie_best_practice

其中介紹了使用Cookie的最佳方法(基本上是我已經嘗試告訴您的逐步說明)。 我說最好的方法,因為我還沒有找到更好的方法:)

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

不良做法將您需要的一切存儲在數據庫中,並開始使用$ _SESSION []

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

還有一件事,您不應該在Cookie中存儲密碼。

添加在user表名為場remember_key VARCHAR 32

用戶登錄時,請在用戶表中進行以下設置:

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

更新查詢:

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

當用戶重新進入頁面時,查詢用戶表中的cookie:

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

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

對不起,偽代碼,也不要忘記對字符串進行轉義

我將更新答案

我相信您應該誠實地替換整個代碼,並對會話進行一些研究。 我之所以這樣說是因為;

首先,您的會話已經安全。 會話執行的操作是將1個帶有令牌的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/zh/session.examples.basic.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM