2013-02-14 84 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从嗅探数据包中获取此信息。

没有什么会阻止某人物理访问计算机。这是不可能的,也不值得保护(大多数人在他们的计算机上有更多的东西,他们不愿意丢失或拥有除了他们的社交网络账户以外的其他人)。