如何在cookie中安全地保存密码?

时间:2014-01-02 15:23:53

标签: php cookies password-protection

我想保持密码就像在cookie中一样是不安全的。问题是我正在使用password_hash(),并且要验证密码我必须拥有没有加密的密码。在登录表单中,它很容易 -

<?php
     password_verify($_POST['password'], $dbpassword);
?>

问题是使用cookie进行验证。在我的配置文件中,我使用与日志记录表单相同的验证,但数据来自cookie,并返回falsetrue。但是cookie中的密码已经加密,因此password_verify()将无效。那我该怎么办?

2 个答案:

答案 0 :(得分:2)

在密码中存储密码严重禁止!不要这样做!

我认为您在询问的是“如何检查用户是否已登录?”

我建议使用SESSIONS,而不是COOKIES。

当用户访问您的网站时,会自动创建一个带有会话ID的COOKIE,并在每个访问过的页面上传输。

会话存储在服务器上。

当您进行用户身份验证(检查数据库上存在的用户名和密码并匹配提供的详细信息)时,您可以设置一些会话变量(例如$_SESSION['loggedin'] = true;),然后当您要检查用户是否是登录后,您将查找此会话变量(例如

//Check if user is logged in.
if(array_key_exists('loggedin',$_SESSION) && $_SESSION['loggedin'] === true) {
  // do something here
}

这只是一个基本实现,我强烈建议您阅读一些有关PHP安全性的在线资源。

答案 1 :(得分:1)

无法将密码安全地存储在Cookie中。另一种选择(尽管仍然不推荐)是将它存储在$ _SESSION中 - 它仍然有点不安全,因为会话可能被劫持,或者恶意代码可能导致它通过网络发送出去。你不应该比较实际的密码,你需要使用哈希值(md5或更安全的东西)和盐。

基本上:

$db_password=get_password_hash_from_db(); /*you should store the md5(salt+password) in the db, not password*/
$salt='some_secret_constant';
if ($_POST['password']) $_SESSION['password']=md5($salt+$_POST['password']);
if ($_SESSION['password']!=$db_password) die('Wrong Password');