我如何保护Cookie?

时间:2011-09-08 22:33:14

标签: php

我使用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。中加密密码。

6 个答案:

答案 0 :(得分:3)

您永远不应该永远存储明文密码。只需谷歌“数据库中的明文密码”来找出原因。您的密码应该存储为(至少)SHA1哈希以及数据库中的随机盐。

您无法以您的方式保护cookie。如果不是更糟的话,你会让自己开放到跨站请求伪造。您还应该生成一个安全的随机哈希来对cookie进行签名(如果不对其进行加密),以确保其有效性。但是,任何密码都不应该在cookie中结束;如果您需要在会话中存储私有数据(您无论如何都应该避免),您应该将会话存储在DB或memcache中。

我只是想提供帮助,但这种会话维护方法已经过时了。请,请重新考虑。

答案 1 :(得分:3)

首先,你永远不应该在纯文本数据库中存储密码!

第二:你永远不应该在cookie中以明文形式存储密码!

第三:如果你使用cookies来实现类似记忆我选项的东西,你不需要将密码存储在cookie中,而是存储在db和cookie中的随机令牌,每次都会自动失效。用户登录并在每次用户登录时创建一个新的。

我是否已经提到从未在平原文本中存储密码

修改

请结帐:http://jaspan.com/improved_persistent_login_cookie_best_practice

其中描述了使用cookie的最佳方式(基本上是我已经尝试过的告诉你的逐步解释)。我说最好的方法,因为我还没找到更好的方法:)

答案 2 :(得分:1)

您永远不应该将密码存储在cookie中,因为它会将密码显示为纯文本。如果黑客获取该cookie并将其打开并找到密码,那么他们找到用户名只是时间问题。

错误练习将您需要的所有内容存储在数据库中并开始使用$ _SESSION []

答案 3 :(得分:0)

您应该真正加密密码。至少使用md5,如果你想将用户的输入与数据库中的值进行比较,只需加密输入并比较它......

还有一件事,你不应该在cookie中存储密码。

答案 4 :(得分:0)

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;

抱歉伪代码,也不要忘记转义字符串

我会更新答案

答案 5 :(得分:0)

我相信你应该将整个代码替换为诚实,并对会话进行一些研究。 我说的原因是因为;

首先,您的会话已经安全。会话的作用是在用户计算机上放置带有令牌的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/en/session.examples.basic.php