Контрольный вопрос по сеансам Codeigniter / PHP - PullRequest
8 голосов
/ 11 июня 2011

Я занимаюсь разработкой веб-приложения с использованием Codeigniter.Когда пользователь проходит проверку подлинности на моем сайте, я сохраняю его «идентификатор пользователя» в своем cookie-файле сеанса (на котором я включил шифрование).Некоторые из моих классов моделей используют значение в параметре 'user-identifier' сеанса / файла cookie, чтобы вносить изменения в свойства учетных записей пользователей.

Меня беспокоит то, что мне интересно, возможно ли кому-то принятьдействительный файл cookie сеанса codeigniter с установленным мной идентификатором пользователя, измените значение идентификатора пользователя на значение другого пользователя и внесите изменения в учетную запись другого пользователя.Будет ли сеанс codeigniter / php создавать ошибку, если кто-то попытается изменить свойство cookie сеанса?

Ответы [ 3 ]

21 голосов
/ 11 июня 2011

Откройте ваш /application/config/config.php, найдите «sess_use_database» и измените его на «TRUE», если вы этого еще не сделали.Таким образом, все переменные сеанса будут храниться в таблице базы данных, а cookie сеанса будет содержать только строку идентификатора сеанса.

Для дополнительной безопасности вы также можете изменить "sess_match_ip" на TRUE.Таким образом, если кто-то украдет файл cookie вашего пользователя и попытается передать его как свой собственный, сеанс будет уничтожен.

4 голосов
/ 11 июня 2011

"если возможно взять действительный cookie-файл codeigniter-session, измените значение идентификатора пользователя на значение другого пользователя и внесите изменения в учетную запись другого пользователя."

Мой ответ на самом деле не относится к CI, поэтому имейте это в виду.

Когда вы авторизуете пользователя "username1", то для целей аутентификации должно быть отправлено обратно клиенту, что должно быть хешем, который коррелирует серверэтому пользователю.Вся связь между клиентом и сервером будет зависеть от этого хеша.

Сервер сгенерирует уникальный хеш для пользователя, и хеш должен иметь короткий срок жизни.Может ли кто-нибудь захватить хеш и передать от имени этого пользователя?Конечно.Вот почему вы также должны проверить агент пользователя и IP-адрес, чтобы проверить, соответствуют ли они хешу, чтобы предотвратить перехват сеанса.

НИКОГДА НЕ ДЕЛАЙТЕ ЭТОГО:
Если видели некоторых новых разработчиковсохранение имени пользователя в файле cookie и использование переменной, отправленной клиентом, для обновления их баз данных.Никогда не делай этого.Никогда, никогда не доверяй клиенту.Когда сервер получает хеш клиента, он должен проверить, принадлежит ли он аутентифицированному пользователю, и получить user_id (переменную для обновления пользовательских данных) с сервера.НИКОГДА от клиента.

3 голосов
/ 11 июня 2011

Я не уверен, какой именно у вас "идентификатор пользователя". Общее правило: не сохраняйте ничего в куки сессии, кроме идентификатора сессии. Сохраняйте все остальное (например, идентификатор пользователя) внутри сервера и извлекайте его, используя идентификатор сеанса.

Если пользователь изменяет идентификатор сеанса (который является случайной строкой), начинается новый сеанс. Идея, лежащая в основе идентификатора сеанса, заключается в том, что невозможно угадать идентификаторы других пользователей, поэтому они случайные и такие длинные.

...