2012-07-30 220 views
0

我爲表單中的「記住我」部分日誌使用基本的cookie系統。這裏是代碼:Cookie安全性php

if(isset($_POST['submit'])) 
{ 
$username = $_POST['username']; 
$password = $_POST['password']; 

    if($username&&$password) 
    { 
     $connect = mysql_connect('localhost','root',''); 
     mysql_select_db('phplogin'); 
     $query = mysql_query("SELECT * FROM utilisateurs WHERE NomUtilisateur='$username' AND MotDePasse='$password'"); 

     $rows = mysql_num_rows($query); 
     if($rows==1) 
     { 
      if($_POST['checkbox']) 
      { 
       setcookie('username',$username,time()+3600); 
       header('Location: membre.php');  

      }else{$_SESSION['username']=$username;header('Location:membre.php');} 
     }else echo "Something something error"; 
    }else echo "Something something darkside"; 
} 

我不確定是否需要保護cookie,如果是的話,該怎麼辦?我真正想要做的就是不允許人們使用假的cookie登錄另一個用戶帳戶,或者在cookie中清除敏感信息。

+4

任何人都可以創建一個cookie,只要他知道自己的用戶名登錄自己在任何用戶。除此之外,在您的數據庫中存儲明文密碼是一個**巨大的禁止**! – ThiefMaster 2012-07-30 07:38:08

+0

嗯,那還不是很好=/ – 2012-07-30 07:39:55

+0

我還沒有在我的代碼中添加所有的地下部分。一切仍然在本地服務器,所以沒問題。 – 2012-07-30 07:43:40

回答

1

目前任何人都可以登錄自己,如果他知道用戶的用戶名。即使設置了cookie,您也需要有一個流程來識別用戶是否是真正的客戶端..例如,當用戶登錄時,您可以將保存在Cookie中的隨機字母數字字符串和針對該用戶的數據庫進行保存,並且下一次使用數據庫中的值交叉檢查字符串並記住每隔X天更改一次字母數字字符串,這樣可以防止攻擊者複製某人的Cookie並使用它們登錄。像這樣的東西做

$uniquekey  = 'A234W'; 
$randomstring = sha1(strval(rand(0,microtime(true))+ $uniquekey + strval(microtime(true)))); 
setcookie('loginID', $randomstring, time()+60*60*24*7,'/', 'www.yoursite.com', false, true); 

和cookie的使用mysql_real_escape_string讀取時眼下過濾任何惡意代碼

+0

使用此代碼只有'microtime(true)'部分實際上是散列輸入,因爲您正在使用算術加法。 – Gumbo 2012-07-30 08:56:09

+0

@Gumbo $ uniquekey對於所有用戶會有所不同 – Sibu 2012-07-30 08:58:19

+0

這並不重要。通過算術加法,「A234W」結果爲「0」。 – Gumbo 2012-07-30 09:00:40