Php сохранение идентификатора пользователя в сеансе?

Мне интересно, какие риски хранят идентификатор пользователя в сеансе?

а затем просто выполните

if(isset($_SESSION['user_id'])){
  login_user($_SESSION['user_id]);
}

Являются ли сеансы зашифрованными настолько, что нам не придется беспокоиться о их хэшировании? Каковы шансы кого-то изменить свой ID?

Ответы

Ответ 1

Сессия по умолчанию хранится в /tmp как файл. Конечный пользователь не может быть просмотрен, если у вас есть проблемы с безопасностью, такие как обход каталога.

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

Ответ 2

Большинство приложений используют $_SESSION как есть. Если там, где широко распространенная слабость, тогда крупные проекты будут делать что-то по-другому.

Ответ 3

Сохранение идентификатора пользователя в $_SESSION является общепринятой практикой.

Альтернативой может быть сохранение информации о сеансе (включая текущий идентификатор пользователя) в таблице с использованием session_id() в некоторой форме в качестве ключа.

Информация сеанса хранится как обычный текст.

В зависимости от вашей настройки местоположение сеанса должно быть безопасным на правильно настроенном сервере. Можно изменить местоположение с помощью session_save_path(), который позволит преодолеть потенциальные проблемы с местоположением.

Ответ 4

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

Ответ 5

Я бы посоветовал не добавлять к сеансу только идентификатор пользователя. Например:

1: создайте учетную запись в одном браузере и войдите в систему. Затем оставьте этот браузер открытым и перейдите на другой компьютер.

2: Войдите в ту же учетную запись и удалите ее. Теперь создайте новую учетную запись с другим паролем (с тем же именем пользователя, если оно используется как идентификатор).

3: Вернитесь на другой компьютер и делайте что-нибудь. Вы обнаружите, что теперь вполне возможно использовать учетную запись, сделанную на другом компьютере.

В принципе, поскольку сеанс хранит идентификатор, это может не обязательно принадлежать одному и тому же человеку в зависимости от того, какие учетные записи изменились и т.д. И если пароль не требуется (поскольку вы уже прошли этот процесс, когда у вас была учетная запись) он похож на взлом.

Таким образом, у этого есть только шанс работать, если при удалении учетных записей пользователей из базы данных числовые идентификаторы могут быть повторно использованы (около 2% систем, которые я видел, делают это). Или, если пользовательский идентификатор является именем пользователя (около 20%, я видел это).

Поэтому я хотел бы предложить добавить к сеансу идентификатор пользователя и пароль hash (i.e md5, sha1) и получить информацию о пользователе, используя каждый из них каждый раз.