Подтвердить что ты не робот

Захват сеанса PHP

У меня вопрос о захвате сеанса в PHP. Я читал об этом сегодня утром, и у меня есть несколько вопросов, на которые я не ответил четко в документации, которую я читал.

Может ли пользователь изменить свою сессию на моем веб-сайте? то есть, если они имеют сеанс X при входе в систему, могут ли они изменить этот сеанс на Y или Z, если они так выбирают?

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

4b9b3361

Ответ 1

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

На стороне сервера сеанс имеет идентификатор (который передается между клиентом и сервером), содержимое (хранится на сервере) и потенциально другие свойства, такие как время последнего доступа. Идентификатор сеанса обычно передается как файл cookie. В PHP именем по умолчанию для файла cookie является "PHPSESSID". Если файлы cookie недоступны, PHP (необязательно) использует параметр строки запроса с тем же именем ( "PHPSESSID" ). Этот файл cookie (или параметр запроса) можно легко изменить, и поэтому идентификатор сеанса также можно изменить.

Содержимое сеанса (т.е. содержащее состояние входа пользователя) не может быть изменено клиентом, данные хранятся на сервере и могут быть изменены только PHP script на этом сервере. Обратите внимание: в среде с общим хостингом (совместно используемой другими службами или пользователями) сеансы могут быть перезаписаны при использовании каталога хранения по умолчанию (/tmp). Чтобы защитить от этого, используйте базу данных через session_set_save_handler() или установите собственный каталог сеанса с помощью session.save_path с соответствующими настройками разрешений каталога (желательно 700, что означает, что только владелец (пользователь PHP) может читать и писать на него).

Для защиты от захвата сеанса у вас должны быть другие способы идентифицировать пользователя в сеансе. Это может быть пользовательский агент, IP-адрес или другой файл cookie. Ранее упомянутые методы являются обходными способами, лучшим способом защиты от кражи сеансового файла является использование HTTPS, если речь идет о сеансе. Не забудьте установить флаг httponly в true, используя session_set_cookie_params()

Клиентская сторона, "сеанс" снова перегружается и используется в различных контекстах (например, диспетчеры сеансов, которые восстанавливают открытые страницы при открытии браузера, куки сеанса и sessionStorage). Мы можем попытаться объединить эти значения (в том, что отнюдь не стандартное), заявив, что сеанс браузера состоит из коллекции представлений и связанных с ними данных. (Под "представлением" я подразумеваю грубую вкладку в браузерах с вкладками и в браузерах без вкладок, а объект DOM window предоставляет представление JS.) Каждое представление имеет историю, текущую страницу и данные страницы. Данные страницы для страниц в одном домене разделяются между представлениями в сеансе; если две страницы находятся в разных доменах или разных сеансах, они не делят данные. Выход из браузера закрывает все открытые сеансы (ы), возможно, сохраняя часть сеансов (например, истории, текущие страницы, sessionStorage), чтобы диспетчер сеансов мог повторно открыть их. Файлы cookie сеанса - это файлы cookie, которые отбрасываются при закрытии сеанса; другими словами, файлы cookie сеанса не являются стойкими. Хотя файл cookie сеанса может содержать идентификатор сеанса, две концепции: orthogonal (смысл 4; файлы cookie сеанса могут содержать объекты, отличные от идентификаторов сеанса, а идентификаторы сеансов могут храниться в постоянных файлах cookie).

Независимо от того, зависят ли два разных вида в одной коллекции от браузера. Например, один браузер может считать сеанс состоящим из всех вкладок в одном окне; отдельными окнами являются отдельные сеансы. IE8 позволяет пользователям создавать новые сеансы через пункт меню "Новый сеанс". В противном случае новые окна и вкладки будут открываться в том же сеансе. Режимы конфиденциальности также создают новые сеансы.

Таким образом, браузерные сеансы действительно устанавливаются браузером, хотя он предоставляет пользователям различные способы управления сеансами браузера: создание новых сеансов, изменение истории и текущей страницы в режиме просмотра, сохранение и восстановление сеансов. Пользователь может даже изменять данные сеанса, редактируя сеансы, сохраненные на диске, хотя это не функция, предоставляемая браузером. Ничто из этого не имеет ничего общего с захватом сессии. Сеансы сервера создаются и управляются сервером, но пользователи могут (пытаться) переключать сеансы сервера, изменяя идентификатор сеанса, который их браузер передает на сервер, что является основой для захвата сеанса.

См. также Фиксация/захват сеанса PHP.

Ответ 2

Пользователь может изменить сеанс в любое время. Это просто случайная строка, хранящаяся в cookie в браузере пользователей, и поэтому пользователю очень просто ее изменить.

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

Ответ 3

Ни один пользователь не может изменить фактическое значение сеанса на вашем веб-сайте, но может изменить идентификатор сеанса, который используется для отслеживания сеанса. Этот идентификатор сеанса хранится в браузере клиента вашим веб-сайтом, обычно называемым "PHPSESSID" в файле cookie, который также называется сеансом. печенье. Когда сеанс запускается на сайте, он сохраняет уникальный идентификатор, соответствующий этому сеансу, в соответствующем клиентском браузере в форме файла cookie, называемого "PHPSESSID". Поэтому, если пользователь может получить PHPSESSID любого другого пользователя, и он может заменить свой PHPSESSID на PHPSESSID жертвы, это приведет к перехвату сеанса. Я использую контекст PHP здесь.