Безопасная реализация состояния сеанса и функция "держать меня в системе"
Я хотел бы повысить безопасность текущего приложения в отношении управления сеансами, и я хочу, чтобы пользователи входили в систему до тех пор, пока они явно не выйдут из системы.
Как можно реализовать это безопасно?
Сохранить информацию о сеансе в базе данных, например, sessionid, ip, useragent?
Пожалуйста, укажите требования, возможно, структуру базы данных, что нужно и чего не нужно делать, советы и рекомендации.
Примечание. Я знаю, что такие фреймворки, как asp.NET, rails, codeigniter и т. Д., Уже позаботились об этом, но это не вариант. На самом деле это для классического приложения ASP. Но я думаю, что этот вопрос не относится к конкретному языку.
3 ответа
Ознакомьтесь с рекомендациями по использованию улучшенного файла cookie для постоянного входа (статья и комментарии).
Вы должны знать, что такая система не может быть безопасной, если вы не используете https.
Все довольно просто:
- Пользователь входит в систему.
- Сервер отправляет пользователю куки с датой истечения в далеком будущем.
- Если вы хотите, вы можете записать IP-адрес пользователя.
- Пользователь запрашивает другую страницу.
- Сервер проверяет cookie (возможно, IP-адрес, сохраненный вместе с cookie), видит, что пользователь вошел в систему, и обрабатывает страницу.
Некоторые соображения безопасности:
Как указано выше, нет безопасного пути, если вы не используете https.
Если вы используете виртуальный хостинг, попробуйте выяснить, где хранятся ваши куки. Зачастую они находятся в каталоге / tmp, где каждый пользователь, имеющий доступ к кому-либо и через него, может украсть ваши куки.
Отслеживайте IP-адрес, если вы знаете, что компьютер никогда не изменит его.
Не храните информацию в куки. Просто храните случайное число там и сохраняйте принадлежащую ему информацию на сервере в базе данных. (Конечно, не секретная информация, такая как предпочтительный цвет, может быть сохранена в куки).
Создайте cookie со смехотворным сроком действия, например, 2030 или что-то в этом роде. Если вам нужно состояние сеанса, сохраните идентификатор сеанса в файле cookie (зашифрованный, если безопасность является приоритетной) и сопоставьте его с таблицей в базе данных. IP/UserAgent и т. Д., Как правило, являются метаданными, ключ к сеансу - cookie.