会话安全


Session Security?

使用

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

有人可以去改变会话变量存储的地方,使他们的$_SESSION[' authenticated '] = true吗?

同样的事情,用户有$_SESSION['id'] =他们的索引id。我怎样才能使它更安全呢?有人会去更改id值并冒充另一个用户吗?

下面的方法是正确的方式,使某事更安全吗?

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

并将其存储在数据库的一列中每次我都会

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

谢谢,

我很确定Session在大多数主机上只是一个接口到你的文件系统,也就是说,所有的Session数据都存储在服务器的硬盘上,如果你看看phpinfo()输出,你可以看看Session数据的实际路径在哪里。

话虽如此,除非你chmod你的会话路径777和攻击者碰巧知道你在哪里托管你的应用程序和登录,然后我不认为这是一个大问题。

这里更大的问题是保护您的cookie,因为它是通过您的服务器和客户端来回传递的信息,攻击者可以使用它来冒充合法用户。

是的,使用安全吗?我用这个。我这样做:-检查登录,如果是一个有效的登录,设置$_SESSION['logged'] = 'yes'并生成um token $_SESSION['token'] = 'token'我将这个令牌保存在一个输入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>

In process.php:

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