Передача идентификатора сеанса PHP в качестве параметра POST - PullRequest
0 голосов
/ 17 марта 2012

В свете моей недавней проблемы ( PHP - сеанс потерян / очищен при публикации формы ), идентификатор сеанса почти случайно восстанавливается при публикации формы (вход в систему -> добавить элемент в корзину ИЛИ добавить item to basket -> login), что приводит к потере данных сеанса. Обходной путь был обнаружен, что я мог передать идентификатор сеанса в качестве скрытого ввода, чтобы заставить идентификатор сеанса поддерживать себя. Это практическое исправление? И откроет ли это мне какие-либо уязвимости?

Обратите внимание, что мой сайт работает на общем сервере.

Ответы [ 3 ]

1 голос
/ 17 марта 2012

Я сделаю удар в темноте и угадаю, что, когда вы отправляете форму в другой поддомен, то есть вы набираете http://www.example.com, и отправляете на https://secure.example.comили тому подобное.

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

ini_get('session.cookie_domain');
// if this outputs something like "www.example.com" and you're submitting to
// "somethingelse.example.com", here's your problem.

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

ini_set('session.cookie_domain', '.example.com');  // or...
session_set_cookie_params(ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), '.example.com');

session_start();

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

Или ваша проблема может быть совершенно не связана.В любом случае стоит проверить.

Но, как сказал @Kaustubh Karkare, безопасность передачи переменных сеанса через вашу форму идентична передаче их через cookie-файлы.А что касается практичности, это вполне разумный, если не часто используемый, способ передачи идентификаторов сеансов.

0 голосов
/ 25 мая 2018

Решил это так, думал, что обновлю вас.

Вместо публикации перейдите на страницу действий из формы и используйте эту

<?php

//let's start the session
session_start();

$_SESSION['whateveryouwanttocallit'] = session_id()

?>

Так что вообще не публикуйте это вообще ...

Вы можете проверить это следующим:

<?php print_r($_SESSION)?>

И можете подтвердить это: <?php echo session_id()?>

В ответ на ваш вопрос, однако, это не очень хорошая работа.

Отправляя идентификатор сеанса в свой сеанс, вы просто создаете дубликат информации и называете его как хотите, идентификатор сеанса уже находится в вашем сеансе.

Кроме того, если вы собираетесь использовать свой идентификатор сеанса в скрытом вводе в виде файла cookie, чтобы гарантировать, что информация об этом пользователе не потеряна, проблемы будут:

  1. Сессия с этим вновь созданным идентификатором сессии также будет удалена.
  2. Даже если он останется, идентификатор сеанса будет восстановлен и будет другой строкой.

Пожалуйста, подтвердите, если это помогло!

0 голосов
/ 17 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...