【发布时间】:2012-08-02 14:26:33
【问题描述】:
我希望我的用户在登录我的网站时能够“保持登录状态”。在这篇文章的最佳答案"Keep Me Logged In" - the best approach 的建议下,我决定在一个 cookie 中散列用户的盐和密码的组合,并将用户的 id(一个数字)存储在另一个 cookie 中。当然,哈希值也将存储在数据库服务器端,以供用户再次返回时进行验证。我使用的盐值与我在用户首次注册时用来散列用户密码的值相同,因此它是静态的 - 它在会话之间不会改变。我发现这种方法存在一些问题。
1) 如果注册盐是静态的,或者我应该每次为 cookie 生成不同的盐,使用注册盐是个好主意吗?
2) 如果有人获得 cookie 的访问权并将其复制到另一台计算机上,然后尝试从该计算机访问该网站,理论上它会自动将其登录到该用户的帐户,这不是安全问题?
3) 在某些怀有恶意意图的用户访问数据库的情况下,安全网站会使用加盐和散列密码,使黑客很难访问多个帐户(如果有的话)。但是,通过简单地使用散列值和盐值并创建一个与他们在数据库上更改的值相匹配的 cookie,他们可以有效地访问他们想要的任何帐户,从而使整个密码散列过程变得毫无用处。因此,我现在使用的这种 cookie 方法正在损害我的整个数据库和我所有用户的帐户。
所以我的问题是,如何在 PHP 中存储包含敏感信息(例如用户密码哈希)的 cookie,而不必担心上述问题? Gmail 和 Hotmail 等提供“保持登录”功能的网站肯定采用了比我现在做的更安全的方法,那么他们会怎么做呢?
【问题讨论】:
标签: php security cookies login hash