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