【问题标题】:PHP - Is it secure way to store password in cookie? [duplicate]PHP - 将密码存储在 cookie 中是否安全? [复制]
【发布时间】:2011-07-11 03:35:19
【问题描述】:

可能重复:
PHP storing password in cookie

在登录系统中,如果用户想保持登录状态,则需要将密码存储在浏览器 cookie 中。我已经经历了许多关于 SO 的先前问题,并发现将密码存储在浏览器 cookie 中并不安全。我想知道我是否喜欢

$string = 'snfcikkfbnvekrew';
    $salt = md5($passwrod.$string); 
    $password = md5(sha1(md5("$salt$string$salt")));  //or some other random sequence of encryption functions

我只是想知道如果有人访问 cookie 会执行什么样的攻击?

【问题讨论】:

  • 这个问题的第一部分在这里:stackoverflow.com/questions/5232908/…
  • md5 和 sha1 不是加密。它们是哈希函数。把它们想象成绞肉机。拿一头牛做汉堡很容易——(实际上)拿汉堡做一头牛是不可能的。
  • 所以,嗯,您之前的问题的答案是不要这样做;现在你在问做所说的最好的方法吗?
  • @mario:得票最高的答案是“在 cookie 中存储密码的加盐哈希”。这就是我问这个的原因。
  • 那么也许你应该接受这个答案:D

标签: php


【解决方案1】:

为什么需要将密码保存在cookie中?为什么不是其他用户标识符,例如内部用户 ID 或某种临时值?

“商店”和“密码”这两个词应该很少一起使用,当它们一起使用时应该仔细检查。

【讨论】:

  • 同意。你想存储一个加盐的散列或 something 你知道并且可以很容易地重新计算但不容易被猜到。在登录时使用带有您最喜欢的数学老师姓名和月相的时间戳同样有效(并且方式风险更小)。
【解决方案2】:

永远不要尝试将密码存储在cookie中。最好将session_id存储在cookie中,而密码则存储在服务器上的会话中。你无法想象黑客破解你刚刚编码的字符串是多么容易。

【讨论】:

    【解决方案3】:

    如果有人访问了 cookie,即使它已经过哈希处理,在 cookie 过期之前,他们仍然拥有与您网站的用户相同的访问权限。即使过期,除非服务器上的密码已更改,否则仍然可以使用相同的哈希值登录。

    如果您希望允许他们在不登录的情况下再次访问,而不是存储密码,请设置一个带有其他随机令牌值的 cookie,该值与他们的用户帐户一起存储。在每次页面访问和表单提交时,您都可以重新生成并存储新的随机令牌并将 cookie 重置为新值。这样一来,存储的值就会不断变化,因此如果恶意用户在传输过程中获取了 cookie,那么在他们能够使用它时它可能已经发生了变化。

    最后,如果您要存储任何值以供以后登录,您应该通过 SSL 进行,并且只通过 SSL 发送 cookie。

    【讨论】:

      【解决方案4】:

      密码本身不需要存储在 cookie 中,因为无论如何您都无法检索它并反转它以证明它是正确的密码。但是,如果您想使用密码/电子邮件/recId/任何您可以在内部检查的算法组合,那么请继续为您的字符串加盐。我可能会使用一些未加密或可逆的 UID 以及唯一且可重新创建的加密密钥的组合,这样我就可以查找相关记录并进行验证,例如

      select 1 as loggedIn from userTable as u where u.uid=[cookie.uid] and md5(concat(u.email,u.accountcreated,u.lastlogin))=[cookie.hash] 
      

      【讨论】:

        【解决方案5】:

        使用$_SESSION 而不是编造自己的 cookie 系统,而是让会话持续一段时间:

        // keep user logged in 6 months
        session_set_cookie_params ( $lifetime = 6 * 30 * 24 * 60 * 60 );
        session_start();
        
        if ($login == TRUE) {
            $_SESSION["user"] = $user_name_or_id;
        }
        

        【讨论】:

        • (需要更多配置,不建议访问高流量,因为会话存储会不断增长。)
        • 公平地说,我们真的认为 OP 是在谈论高流量网站吗?在大多数情况下,PHP 的内置会话处理很好,而自己滚动通常是浪费时间,或者更糟。
        • Do not use long running sessions。有比让会话持续那么长时间更好的方法......
        • @ircmaxell:这听起来像是一个笼统的建议,永远不要使用会话。您容易受到上述问题的影响,具体取决于 DoS 请求数量,而不是实际存储时间。在这种特殊情况下,会话的使用和创建实际上取决于 [x] 保持登录复选框 成功登录。授权会话越少,实际上会话劫持的可能性就越小。
        【解决方案6】:

        我已经非常成功地使用了“A Secure Cookie Protocol”(6 页)中解释的方法

        http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf

        【讨论】:

          猜你喜欢
          • 2011-01-07
          • 2010-12-06
          • 2021-07-15
          • 2013-11-04
          • 1970-01-01
          • 1970-01-01
          • 2015-06-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多