Безопасное значение тайм-аута для класса сеанса codeigniter? - PullRequest
0 голосов
/ 11 августа 2009

Я использую класс сеанса codeigniter для обработки моих сессий PHP. Session_id:

Одна из переменных сеанса, автоматически создаваемых при каждом посещении сайта.

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

На моем сайте мне нужна функциональность для отслеживания незарегистрированного пользователя, и в настоящее время я реализую это, сравнивая идентификатор сеанса посетителя со значением сохраненного идентификатора в таблице VISITOR в базе данных. Это работает отлично, за исключением того факта, что идентификатор сеанса истекает каждые пять минут. Я бы хотел, чтобы мое приложение запоминало посетителей дольше 5 минут (вроде того, что делает SO, когда вы публикуете вопрос или ответ без регистрации).

У меня такой вопрос: видите ли вы какие-либо проблемы с безопасностью, просто увеличив время восстановления класса сеанса (примерно до 12 часов)?

Обновление: Судя по ответам, которые я видел до сих пор, похоже, что это скорее проблема производительности, чем проблемы безопасности. Довольно странно, как работает класс сеанса codeigniter, потому что при создании нового сеанса он также создает новый файл cookie, который, похоже, сохраняется в течение всего сеанса. Я думаю, я мог бы создать еще один файл cookie с идентификатором сеанса, который длится столько времени, сколько мне нужно. Но насколько серьезной была бы проблема с производительностью, если бы я должен был сохранить сессии примерно на 12 часов? Замедлит ли это, если у меня не будет миллионов уникальных посетителей в течение 12 часов (в этом случае у меня будут большие проблемы, о которых нужно беспокоиться ...)?

Ответы [ 3 ]

1 голос
/ 11 августа 2009

Две вещи с этой идеей:

  • Если пользователи уходят со своего компьютера (не блокируя его / не закрывая браузер) , кто-то другой может использовать его для перехода на ваш сайт со своей учетной записью.
    • ну, это, вероятно, не ваша проблема
    • если у вас есть несколько полей логина / пароля, ваши пользователи, вероятно, уже запомнят свои логин + пароль в браузере в любом случае (ну, в любом случае, для зарегистрированных - и те, вероятно, имеют больше «мощности», чем нет зарегистрированные)
  • Если на вашем сайте много пользователей, у вас будет больше файлов сессий
    • как сеансы хранятся в файлах
    • (то же самое, если они хранятся в БД / memcached - в этом случае вы должны убедиться, что вы настроили memcached, чтобы было достаточно ОЗУ для хранения большего количества сессий)

Итак, да, существует небольшая угроза безопасности; но я не думаю, что это действительно актуально.


Другая идея состояла бы в том, чтобы сохранить короткое время жизни сеанса, но хранить некоторую информацию в файлах cookie, причем время жизни более важно, чем это?
На самом деле достаточно информации, чтобы позволить воссоздание нового сеанса, при этом пользователь ничего не замечал?

Но, да, это потребовало бы немного больше работы на вашей стороне ...


Чтобы добавить немного больше точности после редактирования:

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

Это "стандартный" способ работы с сессиями - по крайней мере, в PHP:

  • Данные сеанса хранятся в файле, на диске, на сервере
  • и файл cookie используется для сохранения «связи» между пользователем и файлом, содержащим информацию о его сеансе. Без этого файла cookie невозможно было бы узнать, какой из этих файлов содержит сеанс определенного пользователя.

Но сколько проблем с производительностью было бы, если бы я должен был спасти сеансы около 12 часов?

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

0 голосов
/ 27 января 2010

Один совет по безопасности:

Оставить True on sess_match_useragent(application/config/config.php)

0 голосов
/ 11 августа 2009

В зависимости от количества посетителей вашего сайта, сохранение сеансов в течение 12 часов может быть не очень хорошей идеей. Почему бы не использовать куки? Это зависит от того, включен ли пользователь в своем браузере или нет: http://www.php.net/setcookie.

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