2011-09-08 79 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