PHP登录cookie安全性

时间:2011-03-11 00:20:42

标签: php

在过去大多数关于登录系统中“记住我”功能的安全性问题上,建议使用Persistent Login Cookie Best Practice

如果我理解正确,这种方法是这样的:

  1. 如果用户检查以记住密码,则应设置包含用户名,后跟分隔符和一些大随机数的cookie。例如:

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

  2. 在数据库中存储用户名和哈希字符串。
  3. 如果两个cookie都存在,并且在db中相互映射,则接受登录。
  4. 验证后,从cookie中删除随机数,生成新号码并存储在cookie中。 (我是否还需要在数据库中更新这个新生成的散列字符串?
  5. 当用户退出时,当前的cookie号也会失效。(我应该从数据库中删除用户名和随机字符串吗?
  6. 是这样吗?

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

    非常感谢。

2 个答案:

答案 0 :(得分:2)

实际上,这是我推荐的。示例DB架构

用户:

  • USER_ID
  • 用户名
  • autologin_hash
  • autologin_expire

过程:

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

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

答案 1 :(得分:1)

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

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

至于使用该cookie阻止其他人登录,你可以做...

  • 用户代理也必须完美匹配。
  • 登录后,他们的帐户会被标记为记住登录。在更改密码,付款时,您需要再次申请密码。
相关问题