0

将用户的用户名密码存储在 cookie 中是一种好习惯吗?我真的很想知道像(Facebook、digg、twitter)这样的大网站是如何处理这个问题的。我的代码是这样的:

<?php

$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

?>

每次成功登录后,我都会将$username$password(md5) 存储在 cookie 中。并重新生成会话IDsession_regenerate_id()


为了验证用户身份,我检查是否存在登录会话,否则我验证 cookie。

有任何想法吗?谢谢

4

4 回答 4

2

我有点困惑——您使用的是 PHP 会话还是 cookie?

如果您将数据存储在会话($_SESSION['username'] = 'Tom'等中),则该数据不会存储在用户 cookie 中。

如果您将数据存储在单独的 cookie 中(例如自动登录),您可能希望存储一个不同的随机 id,并在数据库表中查找用户 id。

autologins
----------
key (random hash)
user_id
expires
于 2010-01-02T12:55:52.620 回答
0

仅仅一个 md5 是不够的,你至少应该包含一个随机的“盐”(一个小的随机字符串),你存储在你的数据库中。

编辑:顺便说一句,您是存储密码纯文本还是加密?这可能是一个更大的安全风险。

于 2010-01-02T12:37:39.297 回答
0

标准做法是在 cookie 中为用户提供会话 ID,无论是您自己还是使用 PHP 会话。将用户名和密码哈希存储在 cookie 中仍然是由某些网站完成的,但我更喜欢前者。它允许您让用户更好地控制他们的登录,因此他们可以看到他们有多少会话以及他们来自哪个 IP,例如 - 请参阅 GMail 以获得一个很好的示例。

关于盐和散列的主题,您应该将密码散列存储在加盐的数据库中。理想情况下,每个用户的盐应该不同。如果您的数据库被盗或暴露,这将使攻击者更难获取密码(如果他们都使用相同的盐,他们可以为该盐生成彩虹表,这需要很长时间,但会让然后他们很快就破解了密码)。为安全起见,盐还应包含一些非字母数字字符,如 %$&^。

于 2010-01-02T13:00:26.370 回答
0

Joel L 的回答很好。我唯一要添加的是,您可以添加一些额外的信息来识别用户,而不是随机 ID,以使其更安全。

例如,使用用户 IP 地址和盐的哈希值,可以提供额外的安全性,防止有人窃取或嗅探用户的安全 cookie。

我怀疑 TWitter 使用了类似的东西,这就是为什么你一次只能从一台计算机永久登录到 Twitter。

于 2010-04-18T22:02:28.387 回答