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