PHP - 在cookie中存储密码是否安全?

时间:2011-03-08 14:04:54

标签: php

  

可能重复:
  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会发生什么样的攻击?

6 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:7)

如果有人访问了Cookie,即使它已经过哈希处理,他们也会拥有与您的网站用户相同的访问权限,直到Cookie过期为止。即使它过期,除非服务器上的密码已更改,否则仍可使用相同的散列值进行登录。

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

最后,如果您要存储以后登录的任何值,您应该通过SSL执行此操作并仅通过SSL发送cookie。

答案 2 :(得分:4)

使用$_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;
}

答案 3 :(得分:1)

永远不要尝试在cookie中存储密码。最好在cookie中存储session_id,而在服务器上的会话中存储密码。您无法想象黑客如何轻松解码您刚刚编码的字符串。

答案 4 :(得分:0)

密码本身不需要存储在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 :(得分:0)

我已经非常成功地使用了“安全Cookie协议”(6页)

中解释的方法

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