用户帐户的PHP cookie和会话安全性

时间:2012-02-02 17:03:32

标签: php security session cookies

在研究了使用“记住我”功能进行安全登录的方法之后,我遇到了许多关于如何使其安全的相互矛盾的观点。我希望创建的登录系统不需要高度安全,但我想选择一个安全简便的方法,我有两个问题。

  1. 应该存储在会话变量中以检查用户是否已登录,这只是用户名(或ID)。如果它只是用户名,那么在用户发现他们的帐户遭到入侵并希望更改密码以阻止恶意用户搞乱其帐户的情况下会发生什么?如果恶意用户有会话,那么即使密码被更改,他们仍然可以继续恶意,直到他们的会话到期为止,这是否可以避免 - 可能会在密码更改时使用该用户名的所有会话无效?

  2. 在(HttpOnly)cookie中存储密码(使用仅用于cookie的盐重新加密)和用户名是否具有“记住我”功能的足够方式?我听说过数据库存储用户名和随机生成的密钥的方法,这也放在用户cookie中。然后,当用户操作发生时,旧密钥被替换为新密钥并被提供给用户的cookie。这种类型的cookie安全性是否值得,或者通常的重新加密密码方法是否足够?

2 个答案:

答案 0 :(得分:3)

通常如果你想记住用户,你会生成一个“密钥”并将其存储在数据库中,然后设置它的“生命周期”(这可以是任何东西,比如6小时或2天)。您将该密钥存储在cookie中(以及用户ID)。现在,每次用户连接到网站时,您都会比较两个密钥。如果数据库中的密钥已超过其生命周期,则生成新密钥并将其存储在cookie中。因此,如果某人窃取了cookie(不知何故),他必须在再次连接到网站并重置密钥之前使用它。这是我最常见的方法。

答案 1 :(得分:2)

  1. 如果帐户已被盗用,那么您可以做的很少(如果有的话)。恶意用户可能会改变他/她自己的帐户密码,以及电子邮件地址等。试图解释“真实”用户和恶意用户同时登录的情况是没有意义的,IMO。< / p>

  2. 永远不要将任何敏感数据存储在cookie中(仅限HTTP)。