представление идентификатора сеанса на сервере вызывает фиксацию сеанса

Рассмотрим мой код ниже:

<?php
session_start();

if(!isset($_SESSION['count'])) $_SESSION['count']=0;
else ++$_SESSION['count'];

echo $_SESSION['count'];
?>

когда я вызываю это в моем браузере http://localhost/user_login.php?PHPSESSID=1234

когда я нажимаю перезагрузить несколько раз, я вижу, что мой счетчик увеличивается, однако, когда я печатаю

http://localhost/user_login.php?PHPSESSID=5678

и несколько раз я вижу, что он снова отсчитывает от 0.

Когда я оставляю счетчик с номером, отличным от первого, а затем возвращаюсь к первому URL, я вижу, что число снова меняется !! Кажется, что я создал две разные сессии, и я мог бы даже создать больше таким образом !!! Есть ли способ предотвратить счастье?

1

Решение

При таком подходе очень опасно, что злоумышленник сможет захватить любые сеансы, которые не были удалены или истекли.

Чтобы предотвратить это, добавьте простую проверку, чтобы изменить идентификатор сеанса с помощью session_regenerate_id,

Эта функция сохраняет все текущие значения переменных сеанса, но заменяет идентификатор сеанса новым, который злоумышленник не может знать.

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

Код:

    <?php
session_start();

if(!isset($_SESSION['initiated'])){
session_regenerate_id();
$_SESSION['initiated']=1;
}
if(!isset($_SESSION['count'])) $_SESSION['count']=0;
else ++$_SESSION['count'];

echo $_SESSION['count'];
?>

Если вы хотите быть ультра параноиком, вы можете даже перегенерировать идентификатор сессии при каждом запросе.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]