2011-08-05 162 views
8

是否安全使用會話安全性?

If ($_SESSION['authenticated'] == true) { 
    /////Show secure page 
} 

有人可以隨便去改變其中會話變量存儲,使他們的$ _SESSION [「autheticated」] =真?

與具有$ _SESSION ['id'] = =的用戶相同的東西到他們的索引ID。我將如何能夠使這個安全嗎? 有人可以去改變id值並冒充另一個用戶嗎?

下面的方法是否可以使事情更安全?

$_SESSION['random_check'] = (random number) 

而且其存儲在我的數據庫,每次一列,我會

If ($_SESSION['authenticated'] == true && $_SESSION['random_check'] == random_number) { 
/////Then show secure page 
} 

感謝,

+0

我用這個方法對我的所有項目'booleans'與用戶名的散列和登錄(還更新的日期相結合DB +在會議期間舉行),那麼當檢查,所有被比作有效並再次更新)如果在共享主機生病變化即時保存,以防萬一與路徑的.htaccess文件夾 –

回答

3

我敢肯定,在會議舉辦最多隻是一個接口的文件系統,即所有會話數據存儲在服務器的硬盤上,如果你看看phpinfo()輸出,你可以看看會話數據的實際路徑在哪裏。

雖這麼說,除非你搭配chmod您的會話路徑777和攻擊者碰巧知道你在哪裏託管您的應用程序,並有登陸,那麼我不認爲這是太大的問題。

這裏更大的問題是確保您的Cookie,因爲它是一塊這回事來回通過您的服務器和客戶端,攻擊者可以使用假冒合法用戶的信息。

1

是的,是否安全使用。我用這個。 我這樣做: -check登錄,如果是有效的登錄,設置$ _SESSION [「登錄」] =「是」,併產生嗯令牌$ _SESSION [「令牌」] =「令牌」 由此看來,救我在輸入html元素中檢查每個動作。 類似:

<?php 

    class token { 



     public function generateToken() { 

      return $_SESSION['token'] = md5(microtime()); 

     } 



     function generateField($name = "token"){ 

      return "<input type='hidden' value='{$_SESSION['token']}' name='{$name}'>"; 

     } 



     public function getToken() { 

      return $_SESSION['token']; 

     } 



     public function getTokenFromFields($method = "GET") { 

      return strtoupper($method) == "GET" ? $_GET['token'] : $_POST['token']; 

     } 



     public function checkToken() { 

      return $this -> getToken() == $this -> getTokenFromFields(); 

     } 

     public function updateToken() { 
      $_SESSION['token'] = md5(microtime()); 
     } 

    } 



?> 

<?php 
//orther file 
require 'class.token.php'; 
$token = new token(); 
$Atoken = $token -> generateToken(); 
echo "<script> 

     var data = {}; 

     data['token'] = '{$Atoken}'; 

     data['foo'] = 'baa'; 
    </script>"; 
$token -> generateField(); 
?> 

<script> 
$.ajax({type:"GET", url:"process.php", "data=foo=baa&token=" + data.token, success:function(response) { } }) 
</script> 

在process.php:

<?php 
if($_SESSION['token'] == $_GET['token']) { 
//do something 
} else die('bad token'); 
?>