【发布时间】:2013-02-20 01:30:47
【问题描述】:
当用户登录我的网站时,它会创建 2 个 cookie,一个带有会话 ID(与后端的用户 ID 相关)和一个持续 3 个月的记住我 cookie。
记住我的 cookie 构造如下:
userid:timeout:hash
其中哈希是 userid:timeout 的 HMAC SHA256 哈希,以防止篡改。
如果会话 ID 不存在(用户关闭浏览器并再次打开,cookie 消失了,或者会话 ID 在 memcached 中不存在),它会查看记忆 cookie 并重新生成一个新的会话 cookie,前提是它没有超时并且哈希是正确的。
但是,我根本看不到拥有会话 cookie 的意义,因为会话 ID 只是指向后端中的用户 ID。我可以使用记住我的 cookie 来检索当前用户。
所以我正在考虑完全取消会话 cookie,并有兴趣听听对此的一些想法。这种方法听起来相对安全吗?我能做得更好吗?
提前致谢!
【问题讨论】:
-
任何人都可以计算 SHA 哈希。您需要使用 HMAC。
-
这是一个HMAC,会更新问题
-
您的用户无法选择不“记住我”?如果他们不想在 3 个月内登录怎么办?他们必须退出?我可能是错的,但我觉得很多人依靠关闭浏览器来清除他们“未记住”的登录信息——因为传统上是这样做的。
-
是的,点击“退出”并非不合理。您没有选择不在 StackOverflow 上保持登录状态 ;-)
-
您应该尽可能重用现有的身份验证框架,因为它确实很复杂。比如看看github.com/delight-im/PHP-Auth
标签: php session cookies security