登录验证令牌php.卡住了


login authentification token php .. stuck

当用户注册帐户时,会创建一个包含列的表;userid和token。这是因为如果用户在不同的计算机上登录时选中记住我,则每台计算机都有不同的令牌。

register.php

//user specific table created    
$create = $connectdb->prepare("CREATE TABLE `user-:username` (userid INT, token varchar(200)");
                        $executequery = $create->execute(array("username"=>$username)); 

以下是login.php的一个片段;我创建令牌,将令牌存储在cookie中,并将令牌插入特定于用户的表

  if($remember==1) {
                            $token = md5(uniqid('',true));
                            setcookie('token',$token,time()+60*60*24*365);
                            $rememberquery = $connectdb->prepare("INSERT INTO `user-:username` VALUES ('',:username,:token)");
                            $rememberquery->execute(array(":username"=>$username,":token"=>$token));
$_SESSION['username'][0] = $username;       
$_SESSION['username'][1] = $userid;                 
                            }

现在我被卡住了(假设我已经正确地完成了前面的操作)。何时/如何将cookie令牌与数据库令牌进行核对?

很难正确进行正确的身份验证,因此,您必须不时扮演一个小黑客,才能使事情基本正确。首先,你应该阅读会话管理备忘单和owasp页面。

讲座结束后,你应该知道会话管理的注意事项。但如果你需要一张"记住我"的备忘单;)应该是这样的:

  • 值应该是完全随机的,或者加密性强(这可能很棘手)
  • 收到后应进行验证
  • 永远不要相信你在cookie中得到的东西,所以如果没有经过适当的验证,将用户名存储在cookie中是一个非常非常糟糕的主意
  • 如果会话过期,创建一个新会话,用表中的数据填充它,瞧
  • 如果你需要坚持一些东西,使用数据库而不是cookie cookie是不好的,不值得信任;)

还有一个很好的出版物是微软的威胁和对策,它可以帮助你很多。