Сессии PHP небезопасны? Нужен другой метод

Итак, мне сказали, что этот метод небезопасен, так как люди могут подделывать сеансы и использовать его переменные.
Вот небольшая часть моего скрипта:

<div class="panel-body text-center">
    <?php
        if(!isset($_SESSION['steamid'])) {
            steamlogin(); //login button
        }
        else
        {
            include ('steamauth/userInfo.php');
            include ('db.php');
            $mysqli = mysqli_query($db,"UPDATE `users_steam` SET name='".$steamprofile['personaname']."', avatar='".$steamprofile['avatarfull']."' lastseen='".time()."' WHERE steamid='".$_SESSION["steamid"]."'");

            echo "<img class='img-responsive center-block rounded' src='".$steamprofile['avatarmedium']."' title='' alt='' /></img><br>"; // Display their avatar!
            echo "<span>".$steamprofile['personaname']."</span>";
            logoutbutton();
        }
    ?>
</div>

Если пользователь не вошел в систему, отображается кнопка входа. Если наоборот, то я показываю его аватар и имя, а также обновляю свою базу данных.
$_SESSION['steamid'] переменная содержит STEAM ID пользователя, который извлекается при входе пользователя через steam. Есть ли другой способ, кроме переменных $_SESSION, содержать этот идентификатор и использовать его на моем веб-сайте?
Спасибо.


person Ned    schedule 21.02.2016    source источник
comment
So I've been told that this method is not secure - процитируйте, пожалуйста - мой банк использует сеансы, поэтому, если они настолько небезопасны, я хочу знать, жаловаться им или нет..... но мне нужны доказательства, подтверждающие претензию, если я это сделаю   -  person Mark Baker    schedule 21.02.2016
comment
Я слышал о session_regenerate(), которая дает сеансу новый идентификатор, но я не знаю, является ли это ответом на мой вопрос.   -  person Ned    schedule 21.02.2016
comment
Да, вы можете изменить свой идентификатор сеанса, который ссылается на некоторые данные на вашем сервере, но вам нужно знать точное значение файла cookie, установленного php. Но вы не можете изменить значение '$_SESSION[]'   -  person Marnix Bouhuis    schedule 21.02.2016
comment
Кстати, нет другого хорошего способа хранить данные для конкретной клиент-серверной стороны, поэтому используйте сеансы   -  person Marnix Bouhuis    schedule 21.02.2016


Ответы (2)


Вы действительно можете украсть сеансы, но вы должны понимать, что для этого вам сначала нужно украсть файл cookie, содержащий идентификатор сеанса, у клиента, что довольно сложно.

В любом случае, некоторые вещи, чтобы сделать его более безопасным:

  • Используйте SSL, он шифрует все, включая файл cookie сеанса, делает невозможным кражу через мониторинг трафика.
  • Используйте несколько критериев при проверке файла cookie сеанса, а не только идентификатор. Проверьте IP-адрес, браузер, все, что вы можете придумать
  • Установите агрессивное время истечения срока действия файла cookie и немедленно аннулируйте его, если один из указанных выше критериев не соответствует.
  • Каждый раз, когда пользователь посещает вашу страницу, создавайте новую сессию и переносите данные из старой сессии перед ее уничтожением. Обязательно сгенерируйте другой идентификатор сеанса и сохраните его в файле cookie.

Когда дело доходит до веб-разработки, не существует такой вещи, как абсолютная безопасность. Вы должны принять тот факт, что зараженный или отслеживаемый пользователь может быть выдан за вас независимо от того, что вы делаете. Единственная действительно безопасная вещь, которую мы сейчас имеем, — это SMS-токены, которые могут быть неудобны на небольшом веб-сайте. Максимум, что вы можете сделать, сделать это как можно труднее.

person Cârnăciov    schedule 21.02.2016

Чтобы убедиться, что ваша страница защищена, вы должны сохранить переменную сеанса следующим образом:

if( $_SESSION['logged_in'] )
{
     // your Code
}

это означает, что только вошедший в систему пользователь может видеть.

Теперь для подделки переменных сеанса это невозможно. Кроме того, переменные сеанса не хранятся на клиентском компьютере, они хранятся только на сервере. Все, что получает клиентский компьютер, — это идентификатор сеанса, который обычно хранится в файле cookie.

person Chihab JRAOUI    schedule 21.02.2016