在cookie中存储用户id和密码哈希以实现自动登录?是否接受vbulletin类型的认证



我正在我的网站上设置一个用户帐户系统。SO共识似乎反映在这篇SO问题/文章中。它推荐Charles Miller使用这种方法来存储用户名和一个大随机数:1)在cookie中,2)在DB中的一个单独的表中。通过使用cookie(如果存在)查询该表,用户可以在随后的每个会话中重新验证。如果找到匹配项,则为该会话设置一个新的$_SESSION。它支持从不同的计算机同时登录。

我的问题…

在阅读关于SO的安全问题之前,我正在考虑以类似于vBulletin的方式存储用户信息。据我所知,他们将用户id和散列密码存储在用户浏览器上的单独cookie中。

用户登录后,他们使用$_SESSION变量(例如$_SESSION['user_hash']之类的东西)来维护每个页面请求的身份验证。我没有访问vBulletin软件,但我假设$_SESSION['user_hash']与另一块识别信息一起维护在一个单独的MySQL表中-例如用户id/密码哈希/其他-以便从不同的计算机登录。

我正在考虑通过这样做来创建哈希:

$_SESSION['user_hash'] = $random_hash = sha1(uniqid(rand(), true));

对于以后的会话,如果$_SESSION['user_hash']不存在,那么这两个cookie可以用来自动登录这个人的新会话。我计划实施这个SO问题中概述的$_SESSION安全措施。

从安全角度来看,vBulletin方法是否可以接受?如果将用户id和散列密码存储在cookie中存在问题,那么对它们进行加密是否会减轻一些安全问题?或者是否可以采取其他措施来保护cookie ?

谢谢你的建议

这种方法的问题是,与使用标准会话cookie相比,会话劫持的可能性要大得多。如果我偷了那个cookie,只要用户不更改密码,我就有可能访问他们的帐户。如果会话身份验证使用会话唯一的会话ID,那么通过在数据库中存储最后一次活动时间,可以很容易地将会话设置为在一段时间不活动后超时。

另一件事是,我认为你是过于复杂自己的代码。您已经使用了PHP的会话,我发现它总是工作得很好,那么为什么不直接在用户会话表中存储PHP会话ID和到数据库中用户记录的链接呢?设置另一个包含自己哈希值的cookie又能获得什么好处呢?这就是为什么PHP是一种很好的语言因为很多高级函数,比如会话处理,都已经为你准备好了

最新更新