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) и получить информацию о пользователе, используя каждый из них каждый раз.