Intereting Posts
PHP-скрипт для удаления адресов электронной почты из списка, разделенного запятыми Как создать маршрут в symfony 2, который отображает внешний URL? Не тестируемый базовый класс, расширяющий PHPUnit_Framework_TestCase Встроенная функция PHP (функция isAnagramOfPalindrome) Заголовки функций PHP Mail () Проверьте, является ли регулярное выражение допустимым в PHP Удаление файла сервера передача выбранного datarow в модальный бутстрап Как я могу отлаживать проблемы exec ()? php – обнаружение HTML в строке и перенос с помощью тега кода Декодировать base64 string – php Использование curl в php с «сертификатом CA, сертификатом клиента и приватным ключом» в отдельных файлах Попытка получить потоковые / вложенные комментарии в PHP PHP: самый быстрый способ проверить недопустимые символы (все, кроме az, AZ, 0-9, #, -,., $)? используя завиток, чтобы перейти с одной веб-страницы на другую, используя javascript

Реализация PHP $ _SESSION

Кто-нибудь знает, как PHP сопоставляет идентификаторы сеанса с массивами $ _SESSION? Другими словами, заданный идентификатор сеанса x, где PHP вытягивает значения из набора массива $ _SESSION?

И с учетом идентификатора сеанса и URL-адреса, из которого он пришел, существует ли вероятность того, что кто-то сможет получить доступ к значениям в массиве $ _SESSION?

Solutions Collecting From Web of "Реализация PHP $ _SESSION"

По умолчанию PHP использует обработчик сеанса files . Эти файлы хранятся на основе параметра session.save_path , но по умолчанию используется системный каталог temp (крайне ненадежное место, его можно изменить)

Этот обработчик сеанса хранит каждый сеанс как сериализованный массив PHP в файле с идентификатором сеанса.

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

session.gc_maxlifetime определяет, сколько секунд сеанс считается действительным. После этого момента сеанс имеет небольшую вероятность быть удаленным каждый раз при возникновении запроса. Значение по умолчанию – 1440 секунд (или 24 минуты).

По умолчанию этот шанс составляет 1%, но может быть изменен путем настройки значений session.gc_probability и session.gc_divisor (по умолчанию они равны 1 и 100 соответственно).

Существуют и другие обработчики сеанса, такие как те, что включены в расширения memcache или memcached . Когда-то один был основан на libmm общей памяти libmm , но я считаю, что это было прекращено.

Информация сеанса хранится в файловой системе сервера. В php.ini есть параметр конфигурации session.save_path. Некоторая информация о безопасности сеансов приведена здесь: http://www.php.net/manual/en/session.security.php

Данные сеанса обычно хранятся во временных файлах на диске (см. Параметр session.save_path ), и имя файла отражает идентификатор сеанса.

В общем, да, если кто-то получит идентификатор сеанса другого пользователя и отправит его вместе со своим собственным запросом, он получит доступ к сеансу этого пользователя. Один из способов решения этого – связать сеансы с IP-адресами и аннулировать сеанс, когда запрос поступает с другого адреса.

Нет, нет возможности!

… если ваш код или код любого используемого компонента небезопасны.

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

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

Вы также можете написать собственный обработчик сеанса для сохранения сеанса в базе данных.

Кроме того, если вы хотите затруднить привязку идентификатора сеанса, восстановите идентификатор сеанса в стратегическое время (при повышении привилегий и т. Д.) – или так часто, как вы хотите.

Передайте session_regenerate_id() аргумент True чтобы уничтожить старые данные сеанса.