2012-07-19 64 views
0

当用户注册一个帐户时,会创建一个包含列的表;用户标识和令牌。这是因为如果用户在不同的计算机上登录时记住我,每台计算机都有不同的标记。登录验证令牌php ..卡住

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标记检查到数据库标记?

回答

4

适当的身份验证很难正确执行,因此,您必须不时地发挥一点黑客的作用,才能让事情大部分情况正确。首先,您应该一般阅读Session Management Cheat Sheet和owasp页面。

本讲座结束后,您应该知道会话管理的dos和donts。但是,如果你需要记得我小抄;)应该是这样的:

  • 值应该是完全随机的,或保密性强的(这可能会非常棘手)
  • 应当在recive
  • 验证永远不要相信你在cookie中得到什么,所以如果在cookie中存储用户名是一个非常非常糟糕的主意,如果它没有经过适当的验证
  • 如果会话过期创建一个新的,用你的数据填充它表和瞧,
  • 如果你需要坚持的东西,使用databa se不是曲奇饼干坏,不值得信赖;)

也是一个很好的出版物是微软Threats and countermeasures,它可以帮助你很多。