Безопасность сеанса? - PullRequest
       3

Безопасность сеанса?

8 голосов
/ 05 августа 2011

Безопасно ли использовать

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

Может кто-то просто пойти и изменить место хранения переменной сеанса, чтобы сделать его $ _SESSION ['autheticated'] = равным true?

То же самое с пользователем, имеющим $ _SESSION ['id'] = для своего индекса индекса. Как я смогу сделать это безопаснее? Может ли кто-то просто пойти и изменить значение идентификатора и выдать себя за другого пользователя?

Будет ли приведенный ниже метод правильным способом сделать что-то более безопасным?

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

, а также сохранить это в столбце в моей базе данных, и каждый раз, когда я

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Я почти уверен, что Session в большинстве хостингов - это просто интерфейс с вашей файловой системой, то есть все данные Session хранятся на жестком диске сервера. Если вы посмотрите на вывод phpinfo(), вы можете посмотреть, где находится путь к данным сеанса:

С учетом вышесказанного, если вы не измените путь сеанса к 777, и злоумышленник не узнает, где вы размещаете свое приложение и у вас нет логина, тогда я не думаю, что это большая проблема.

Большей проблемой здесь является защита вашего cookie-файла, так как это часть информации, которая проходит через ваш сервер и клиент и обратно, которую злоумышленники могут использовать для олицетворения законных пользователей.

1 голос
/ 05 августа 2011

Да, это безопасно для использования. Я использую это. Я сделаю это: -check login, если действительный логин, установите $ _SESSION ['logged'] = 'yes' и сгенерируйте токен um этот токен я сохраняю во входном 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'); 
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...