Может ли пользователь изменить значение $ _SESSION в PHP? - PullRequest
33 голосов
/ 25 февраля 2011

это приходит мне в голову, и я задаюсь вопросом, насколько это возможно, насколько безопасно хранить информацию в переменной $ _SESSION PHP?

Ответы [ 4 ]

48 голосов
/ 25 февраля 2011

Хранение переменных в переменной $ _SESSION имеет два потенциала для «небезопасности».

  • Первый, как описано в другом ответе, называется «фиксация сеанса».Идея заключается в том, что, поскольку идентификатор сеанса хранится в файле cookie, идентификатор может быть изменен на идентификатор другого пользователя.Это не проблема, если пользователь получает новый идентификатор каждый отдельный сеанс, поэтому очень трудно найти идентификатор текущего рабочего сеанса и перехватить его.
  • Второе полностью зависит от вашего кода.Если ваш код пропускает значения секретной информации, которую вы храните в $ _SESSION, то это небезопасно.Если ваш код позволяет пользователю контролировать значения этой информации, это небезопасно.В противном случае, если что-то находится в переменной $ _SESSION и ваш код никогда не позволяет пользователю увидеть это или записать в него, тогда это безопасно.
12 голосов
/ 25 февраля 2011

PHP Session работает, сохраняя файл cookie PHPSESSID на компьютере конечного пользователя, который действует как ключ доступа к информации о сеансах на сервере. Это значение cookie является хеш-строкой (безопасность которой зависит от ваших настроек PHP), которая используется для привязки конкретного браузера к заданным вами значениям сеанса.

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

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

3 голосов
/ 25 февраля 2011

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

0 голосов
/ 25 февраля 2011

Если на клиентском компьютере установлены менее безопасные $_COOKIES, $_SESSION хранится на сервере. Его местоположение определяется session.save_path php.ini. Однако все еще существуют проблемы безопасности, такие как фиксация сеанса

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