时存储的用户名密码在cookie一个好的做法用户的?我真的想知道如何大网站如(的Facebook,Digg的叽叽喳喳的)处理这个问题。我的代码是这样的:

<?php

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

?>

每一个成功登录后我存储在cookie中的$username$password(MD5)。并重新生成会话ID与session_regenerate_id()


和来验证我检查是否登录会话中存在用户,否则我认证的cookie。

任何想法?感谢

有帮助吗?

解决方案

我有点困惑 - ?您使用的PHP会话或Cookie

如果你在会话中存储($_SESSION['username'] = 'Tom'等)的数据,即数据没有被存储在用户的cookie。

如果您存储在一个单独的cookie(这样的事情自动登录)的数据,你可能希望存储不同,随机ID代替,并且查找用户ID的数据库表。

autologins
----------
key (random hash)
user_id
expires

其他提示

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

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

在标准的做法是给用户一个会话ID在Cookie,要么自己或使用PHP会话。在Cookie中保存的用户名和密码哈希仍然被一些网站做了,但我更喜欢前者。它可以让你给用户更多的控制自己的登录信息,这样他们就可以知道自己有多少会话具有和IP他们是从,例如 - 看到的GMail的一个很好的例子。

在盐和散列的主题,你应该存储在腌制数据库中的密码哈希值。理想情况下,盐应当是对于每个用户不同。在你的数据库被窃取或暴露的情况下,这将使很多攻击者更难获得密码(如果他们都使用他们可以生成该盐,这需要很长的时间彩虹表相同的盐,而是先给然后将它们打破密码很快)。出于安全的盐也应该包含一些非字母数字字符,像%$&^。

乔尔L'的回答是一个很好的。我想补充一点的是,而不是一个随机的ID,你可以添加一些额外的信息来识别用户,使之更加安全。

例如,使用用户的IP地址和盐的散列,提供了额外的安全性以防止有人窃取或嗅探用户的安全cookie中。

我怀疑,Twitter使用这样的事情,这就是为什么你只能永远在同一时间登录到Twitter的从一台电脑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top