Хороший безопасный способ запомнить пользовательский флажок - PullRequest
1 голос
/ 23 ноября 2011

У меня есть страница входа, которая запрашивает имя пользователя и пароль.На этой странице есть флажок «Запомнить меня».

Аутентификация: Для указанного имени пользователя преобразуйте предоставленный пароль в хеш, используя соль, сохраненную в записи пользовательской базы данных, и сравните хеш с сохраненным хешем.

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

Я думал, что хорошим способом было бы сохранить свое имя пользователя и хэшированное значение.их пароль в cookie и повторно аутентифицировать пользователя при следующем посещении.Соль будет храниться в базе данных.

Ответы [ 3 ]

3 голосов
/ 23 ноября 2011

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

http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/

Ключевой частью этой статьи является то, что не все логины должны быть созданы равными.

2 голосов
/ 23 ноября 2011

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

Это сводит к минимуму утечку информации клиенту и ограничивает возможности злоумышленника восстановить действительный пароль пользователя, если ему удастся украстьcookie (что относительно легко сделать).

Я настоятельно рекомендую вам также установить флаг безопасности для всех ваших файлов cookie, чтобы они отправлялись только через безопасные соединения, и убедиться, что у вас относительно короткий тайм-аут на постоянномлогины.Также рекомендуется провести дополнительные проверки авторизации, например, убедиться, что маркер входа связан с конкретным IP-адресом или отпечатком браузера, чтобы предотвратить случайные атаки.Это по-прежнему не может серьезно помешать решительному атакующему, но может отговорить некоторых скриптовых детишек.

Наконец, пожалуйста, примите во внимание совет @Craig T и запомните только имя пользователя, а не оставляйте пользователя вошедшим в систему. Постоянные входы в систему оченьОпасно, поэтому вы должны тщательно подумать о том, какую выгоду получают ваши пользователи от потенциальных затрат.

Хорошо, что вы правильно храните свои пароли в своей БД!Удивительно, сколько людей думают, что им не нужны соли.

2 голосов
/ 23 ноября 2011

Это зависит от уровня безопасности, который вы хотите поддерживать. Когда я устанавливаю флажок «Запомнить меня», я хочу, чтобы он запомнил только мое имя пользователя. Я все еще хочу предоставить свой пароль как обычно.

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

...