Безопасная реализация состояния сеанса и функция «держать меня в системе» - PullRequest
8 голосов
/ 26 марта 2009

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 26 марта 2009
3 голосов
/ 26 марта 2009

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

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

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

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

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

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

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

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

2 голосов
/ 26 марта 2009

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

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