PHP登录cookie安全性


PHP login cookies security

在过去关于登录系统"记住我"功能中有关安全性的大多数问题中,建议采用"持久登录Cookie最佳实践"。

如果我理解正确,则此方法如下:

  • 如果用户检查记住密码,则应设置由用户名,后跟分隔符和一些较大的随机数组成的cookie。例如:

    $_COOKIE["login"]; ="adam:8794383bb07608636dab808df6c9e29c"

  • 将用户名和哈希字符串存储在数据库中。
  • 如果两个cookie都存在,并且在db中相互映射,则接受登录。
  • 验证后,从cookie中删除随机数,生成一个新数字并存储在cookie中。 (我是否还需要更新数据库中这个新近生成的哈希字符串?)
  • 当用户注销时,当前的cookie编号也会失效。(是否应该从数据库中删除用户名和随机字符串?)
  • 全部吗?

    就像我之前的问题一样,我被告知,如果有人可以访问cookie,则他们可以轻松进行身份验证。那么这种方法如何解决该问题呢?

    非常感谢。


    实际上,这是我的建议。示例数据库架构

    用户:

    • 用户身份
    • 用户名
    • autologin_hash
    • autologin_expire

    过程:

  • 用户点击记得我
  • 服务器分配一个唯一的令牌并将其存储在数据库中,并将其作为cookie发送。
  • 服务器还在autologin_expire字段中分配固定的到期日期
  • 检查用户的cookie是否等于其帐户在服务器上存储的cookie,并且该cookie尚未过期
  • 一切都很好...登录,删除哈希,重新生成它,并更新下一次登录的到期日期
  • 您永远不会希望将用户名或密码存储在cookie中,因为如果不使用SSL,它们很容易被盗。使用唯一的哈希并在每次登录时将其清除可解决以下问题:1)防止身份验证详细信息泄漏; 2)使自动登录仅有效一次(不能窃取Cookie并再次使用); 3)强制使用有效期限服务器端,这有助于防止滥用; 4)很难猜到长的唯一ID,因此,黑客实际上必须窃取Cookie才能获得访问权限。

    编辑:如果您想要更高的安全性,请在用户更改密码时记下注释以清除哈希值。如果用户由于担心密码泄露而更改了密码,则不希望有效的自动登录哈希值散落。


    4)。您确实需要更新哈希,否则此人将不会自动再次登录。

    5)。您应该进行清理,但是如果它无效,则您的代码不应将其视为有效。

    关于阻止其他人使用该cookie登录,您可以执行...

    • 用户代理也必须完美匹配。
    • 登录后,其帐户将标记为已记住登录。当涉及到更改密码,付款时,您再次要求输入密码。