2

我讨厌提出另一个饼干问题。我现在读了很多,它让我感到困惑..

我在 YouTube 和其他网站上看到了很多自称专业人士的操作方法和教程。但我不能直截了当。所以我不得不征求其他人的意见。好吧,cookie 很难保证安全。但是你可以做一些事情,对吧?

在许多教程中,PHP 程序员选择将用户名和密码都存储在 cookie 中。我能理解这是一件非常愚蠢的事情吗?特别是如果您将其用作站点上的身份验证。只需询问 cookie 是否存在而不检查数据库。但这也不够好。如果有人用另一个用户名编辑 cookie。BAM,对该帐户的完全访问权限。

所以,我一直在思考。它是创建和存储令牌作为 cookie 的好方法吗?当用户使用此 cookie 令牌访问站点时。该网站询问数据库:“你们中的哪一个失败者拥有这个?”。如果这是一场比赛并且你参加了比赛。当然,这个令牌必须是不可预测的!我的意思是人类的思想。对于蛮力攻击来说非常困难。

看看这个令牌:

$salt = 'S0M3TH1N6';

$identifier = md5($salt . md5($username . $salt));
$token = md5(uniqid(rand(), TRUE));
$timeout = time() + 60 * 60 * 24 * 7;

setcookie('auth', "$identifier:$token", $timeout);

当这个 cookie 访问时,站点调用数据库来查看用户是否有这个作为令牌。如果没有命中,您将返回登录页面。如果有命中,您可以在会话中获取并存储您需要的所有其他内容。据我所知,会话更可信,因为它们位于服务器端。因此,请勿将用户名和密码存储在 cookie 中。因为 cookie 在客户端。当然使用 mysql_real_escape_string(); 在您获取或添加到数据库的所有内容上。

大家对此怎么看?也许我错过了一些东西,或者很多。随意发表评论。:)

提前致谢。

4

1 回答 1

1

你应该只使用一个会话。

在登录身份验证设置会话:

session_start();
//login succesful?? then:
$_session['user'] = array('fname'=>$query['fname'], 'lname'=>$query['lname']...;

然后在每一页上:

    session_start();
    session_regenerate_id();

    if ($_SESSION['user']){
        echo '<pre>';
        echo $_SESSION['user']
        echo '</pre>';
   }
于 2013-08-29T19:29:03.733 回答