2011-08-05 159 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'); 
?>