Мне интересно, какие риски хранят идентификатор пользователя в сеансе?
затем просто
if(isset($_SESSION['user_id'])){ login_user($_SESSION['user_id]); }
Являются ли сеансы зашифрованными настолько, что нам не придется беспокоиться о их хэшировании? Каковы шансы, что кто-то сможет изменить свой ID?
Сеанс по умолчанию хранится в /tmp
в виде файла. Конечный пользователь не может быть просмотрен, если у вас нет таких проблем безопасности, как уязвимости в обход каталога .
Единственная часть, которую видит клиент, – это уникальный хэш, хранящийся в файле cookie, который сопоставляется с соответствующим сеансом на сервере.
Большинство приложений используют $_SESSION
как есть. Если там, где широко распространенная слабость, тогда крупные проекты будут делать что-то по-другому.
Хранение идентификатора пользователя в $ _SESSION является достаточно распространенной практикой.
Альтернативой может быть сохранение информации о сеансе (включая текущий идентификатор пользователя) в таблице с использованием session_id () в некоторой форме в качестве ключа.
Информация сеанса хранится как обычный текст.
В зависимости от вашей настройки местоположение сеанса должно быть безопасным на правильно настроенном сервере. Можно изменить местоположение с помощью session_save_path (), который позволит преодолеть потенциальные проблемы с местоположением.
Если кто-то может получить доступ к вашей сессии, он, вероятно, может получить гораздо больше. Я бы не хэш его, а также убедитесь, что он не добирается до клиента
Я бы посоветовал не добавлять только идентификатор пользователя к сеансу. Например:
1: Создайте учетную запись в одном браузере и войдите в систему. Затем оставьте этот браузер открытым и перейдите на другой компьютер.
2: Войдите в ту же учетную запись и удалите ее. Теперь создайте новую учетную запись с другим паролем (с тем же именем пользователя, если оно используется как идентификатор).
3: Вернитесь на другой компьютер и делайте что-нибудь. Вы обнаружите, что теперь вполне возможно использовать учетную запись, сделанную на другом компьютере.
В принципе, поскольку сеанс хранит идентификатор, это может не обязательно принадлежать одному и тому же человеку в зависимости от того, какие учетные записи изменились и т. Д. И если пароль не требуется (поскольку вы уже прошли этот процесс, когда у вас была учетная запись), то это похоже к взлому.
Таким образом, у этого есть только шанс работать, если при удалении учетных записей пользователей из базы данных числовые идентификаторы могут быть повторно использованы (около 2% систем, которые я видел, делают это). Или, если идентификатор пользователя является именем пользователя (около 20%, я видел это).
Поэтому я хотел бы предложить добавить к сеансу идентификатор пользователя и хеш пароля (т. Е. Md5, sha1) и получить информацию о пользователе, используя каждый из них каждый раз.