2013-02-14 85 views
0

我正在嘗試製作一個可防止會話劫持的loginscript。我的問題是:我如何做到這一點?我真的不明白我如何以安全的方式做到這一點。目前我有這個代碼。我如何防止sesssion劫持?

if (!empty($_POST["naam"]) && !empty($_POST["wachtwoord"])) 
{ 
    $naam = $_POST["naam"]; 
    $wachtwoord = $_POST["wachtwoord"]; 
    $salt = "boterhammetkaas"; 
    $wachtwoord = sha1($wachtwoord.$salt); 
    $query =$db->prepare("SELECT * FROM opdracht4 WHERE naam = :naam and wachtwoord = :wachtwoord"); 
    $query->bindParam(':naam', $naam, PDO::PARAM_STR); 
    $query->bindParam(':wachtwoord', $wachtwoord, PDO::PARAM_STR); 
    $query->execute(); 
    $rij = $query->rowCount(); 
    if($rij == 1) 
    { 
    $result = $query->fetch(PDO::FETCH_OBJ); 
    $status = $result->status; 
    //setcookie("TestCookie", $status, time()+3600); 
    //setcookie("ip", $ip, time()+3600); 
    $_SESSION['status']= $status; 
    $_SESSION['naam']= $naam; 
    } 
    else 
    { 
     $antwoord = 'Deze gegevens zijn niet bekend'; 
    } 

if (!empty($_SESSION["status"])) 
     { 
      if ($_SESSION["status"] == 1) 
      { 
       include 'beheerder4.php'; 
       $page = 'overzicht'; 
      } 
      if ($_SESSION["status"] == 2) 
      { 
       include 'projectleider4.php'; 
       $page = 'overzicht'; 
      } 
      if ($_SESSION["status"] == 3) 
      { 
       include 'gebruiker4.php'; 
       $page = 'overzicht'; 
      } 
     } 

謝謝你的幫助。

+0

'wachtwoord'是否意味着'密碼'? – 2013-02-14 13:10:51

+0

是的抱歉,我寫在荷蘭。 – 2013-02-14 13:11:53

+0

你有沒有看過服務器上的SSL加密?如果你是通過普通的http來做這件事,那麼這將是第一個開始的地方。 – 2013-02-14 13:14:05

回答

0

只需對您的服務器使用正確的SSL/TLS加密並將cookie保存爲安全(https-only - 第6個參數爲setcookie),就可以防止大多數會話劫持企圖。

這將阻止中間人攻擊和瀏覽器擴展,如firesheep從嗅探數據包中獲取此信息。

沒有什麼會阻止某人物理訪問計算機。這是不可能的,也不值得保護(大多數人在他們的計算機上有更多的東西,他們不願意丟失或擁有除了他們的社交網絡賬戶以外的其他人)。