【问题标题】:Saving User Information in a Cookie将用户信息保存在 Cookie 中
【发布时间】:2012-06-28 01:11:46
【问题描述】:

当用户选择记住我功能时,我会将他的用户名和 ID 保存在 cookie 中。然后,当用户返回站点时,我会根据数据库检查用户名和 ID,以确保用户是合法的。接下来,我通过将 cookie 数据存储在会话变量中来登录用户。这是记住和登录用户的正确方法吗?

【问题讨论】:

标签: php mysql


【解决方案1】:

Cookie 不是一种非常安全的数据存储方式。 cookie 可以由用户修改,并可能导致某人“入侵”您的网站。我建议在 cookie 中存储一个字符串,该字符串是某种东西的哈希值。还将来自 cookie 的散列字符串存储在数据库中。这样,当用户返回站点时,您检查 cookie 是否已填充,将其与数据库中的散列值相匹配,然后找出谁拥有该散列值。如果一切都有效,请登录。

数据库设置

secretKey PK varchar
userid (could be unique) int
validUntil int or date/time
  //If userID is unique you will have to remove this row from the 
  // database when a new key is made for the user,  This would then mean
  // that a user would only be allowed to be rememberd on one computer

伪代码

//User logs in with remember me
    //set cookie to something like md5(userid,username,timestamp)
    //store the md5 in the database layout
//User Returns to site
    //check to see if cookie is set
        //if cookie set
            //find md5 in database which is logged with user id
            //if found and not yet expired log in
            //else show login page
        //if cookie not set show login page

在有效截止日期字段中,您可以将其设置为登录后 2 周。一旦有效截止时间已过,请不要让该密钥起作用,并确保 cookie 对用户而言已过期。

查询以检查登录

SELECT * FROM rememberMe WHERE key="//put md5 here" AND validUntil > time()

【讨论】:

  • 好的,我明白你在说什么,但是如何处理validUntil 字段?过了那个日期我该怎么办?
  • 这个secretKey字段应该在我所有用户的表中,还是应该有一个secretKeys的新表?
  • 您可以将它与您的用户一起使用。但如果是我这样做,我会创建一个不同的表并将成员表加入其中
【解决方案2】:

没有。

这取决于您想要获得的安全程度。以下是您可以采取的一些措施(部分或全部)来提高安全性:

  • 不要在 cookie 中存储任何特定内容(用户名/id/等)。使用随机生成的废话(令牌)。
    1. 在您的数据库中,您可以拥有一个令牌 用户映射
    2. 根据您的数据库检查令牌并在匹配时登录用户
    3. 销毁令牌(将其标记为“已使用”,以后可能会被删除。无论您决定什么,令牌都不再起作用)。
  • https 仅用于传输 cookie、登录等。
  • 如果用户发送过时的令牌(即不在您的数据库中或已被标记为已使用的令牌),这意味着该令牌可能已被盗用。对于经过身份验证的用户(甚至可能使用 ajax)的每个请求,将他们登录时使用的令牌(您可以将其存储在会话中)与过期令牌尝试列表进行比较。如果匹配,这意味着经过身份验证的用户很可能已经劫持了令牌。把他们踢出去。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    相关资源
    最近更新 更多