Безопасная реализация состояния сеанса и функция "держать меня в системе"

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

Как можно реализовать это безопасно?

Сохранить информацию о сеансе в базе данных, например, sessionid, ip, useragent?

Пожалуйста, укажите требования, возможно, структуру базы данных, что нужно и чего не нужно делать, советы и рекомендации.

Примечание. Я знаю, что такие фреймворки, как asp.NET, rails, codeigniter и т. Д., Уже позаботились об этом, но это не вариант. На самом деле это для классического приложения ASP. Но я думаю, что этот вопрос не относится к конкретному языку.

3 ответа

Решение

Вы должны знать, что такая система не может быть безопасной, если вы не используете https.

Все довольно просто:

  1. Пользователь входит в систему.
  2. Сервер отправляет пользователю куки с датой истечения в далеком будущем.
  3. Если вы хотите, вы можете записать IP-адрес пользователя.
  4. Пользователь запрашивает другую страницу.
  5. Сервер проверяет cookie (возможно, IP-адрес, сохраненный вместе с cookie), видит, что пользователь вошел в систему, и обрабатывает страницу.

Некоторые соображения безопасности:

Как указано выше, нет безопасного пути, если вы не используете https.

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

Отслеживайте IP-адрес, если вы знаете, что компьютер никогда не изменит его.

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

Создайте cookie со смехотворным сроком действия, например, 2030 или что-то в этом роде. Если вам нужно состояние сеанса, сохраните идентификатор сеанса в файле cookie (зашифрованный, если безопасность является приоритетной) и сопоставьте его с таблицей в базе данных. IP/UserAgent и т. Д., Как правило, являются метаданными, ключ к сеансу - cookie.

Другие вопросы по тегам