2012-07-19 138 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,它可以幫助你很多。