【问题标题】:How to build a bullet proof cookie system?如何构建防弹cookie系统?
【发布时间】:2014-07-15 17:09:16
【问题描述】:

我知道关于 cookie 主题的大帖子,但我仍然有一些关于实现的不清楚的问题。我的想法是:

在我的数据库中,我为每个用户保存了一个cookie_token,它是在创建帐户时随机生成的。只是一个随机的 SHA1,或者可能是他的 BCRYPT 的更改后的 HASH。

那么我的登录逻辑是:

如果用户访问私人网站

  1. 会话LoggedIn 是真的吗?
    1. 是:一切正常,停止进一步检查
    2. 否:继续 2。
  2. 如果具有其 ID 的用户具有与保存在其 cookie 中的相同令牌,则查询 DB。
    1. 如果是,请设置 LoggedIn cookie
    2. 重定向。

但我也读过所谓的series_identifier,但我无法弄清楚这到底是什么。据我了解,每次用户创建新会话或类似的东西时,它都会以某种方式发生变化,但我不确定如何实现这一点。谁能给我一个建议如何做到这一点,或者可能是其他方法来提高 cookie/登录过程的安全性?

最好的问候, 迈克尔

【问题讨论】:

  • 拍摄cookie很浪费
  • 这是什么意思?
  • 我建议为每次登录重新生成 cookie_token。您需要跟踪每个用户的所有有效 cookie_tokens。 -- 但这比拥有一个静态 cookie 哈希值要好。
  • 啊,好吧,也许是一个静态令牌,并且每次登录时都会重新生成一个,以确保没有人在公共计算机上偷懒或忘记注销?

标签: php security session cookies


【解决方案1】:

如果您希望为长期身份验证构建防篡改 cookie,this 是一个很好的介绍,this 进一步规范了该策略。

您正在做的是将一半令牌存储为选择器(用于 SELECT 查询)并将另一半令牌的哈希值存储在数据库中。

为了验证,您将令牌分成两半,使用第一个找到正确的数据库记录,然后重新散列另一半并将您刚刚计算的那个与存储的那个进行比较(使用hash_equals())。如果它们匹配,那就太好了。

如果你想更进一步,你也可以encrypt your cookies using authenticated encryption,但这可能有点矫枉过正。

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 1970-01-01
    • 2020-12-01
    • 2018-06-03
    • 2012-12-18
    • 2014-08-12
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多