2010-08-05 3 views
4

Я пишу первое веб-приложение Baby's. Моя первая задача состояла в том, чтобы настроить систему проверки подлинности, и я думаю, что все в порядке. Я новичок во всем этом, поэтому:Изменение пароля: Лучшая практика

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

Мой вопрос: Является ли отдельная колонка базы данных лучшей тактикой в ​​данных обстоятельствах или есть что-то лучшее, что я могу сделать?

+0

Разделенная колонна для временной замены? Не 100% уверены, что если я буду следовать вашей идее –

+0

Отдельный столбец под названием «mustchange». Он по умолчанию имеет значение false и имеет значение true, если пользователь должен сменить пароль сразу после следующего входа. – Tony

ответ

3

Отдельная колонка вполне разумна.

Операционные системы обычно имеют поле «Время истечения срока действия пароля», которое удваивается, поскольку флаг «должен измениться при следующем входе в систему», просто установив метку времени на 0 (AKA 1 января 1970 года). Веб-сайты обычно не имеют дат истечения срока действия пароля, и в этом случае достаточно простого логического флага.

+0

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

2

Предполагаю, что вы храните пароли хэшированных и соленых. Если нет, сделайте это. Если это так, вы можете хранить метаданные в соли. Например. соль составляет [0-9a-z]{8}, но для временных паролей это ____[0-9a-z]{4}. (прежде чем downvoting, люди, читайте дальше!) Дело в том, что отдельное поле может быть отредактировано отдельно от хэш-поля. Конечно, должен никогда не бывает, но это может. (неудачные запросы, мошеннические системные администраторы, люди, которые обнаружили phpmyadmin и считают, они понимают систему и т. д.) Сохранение «состояния» пароля в соли предотвращает такой хаос: при проверке пароля вы всегда сможете чтобы убедиться, что вы подтвердили пароль временного пароля, и вы всегда сможете указать пользователя, которому нужно получить приглашение «ввести новый пароль». всегда.

+0

Интересно. Я делаю хэш-пароль, и я обязательно рассмотрю идею его соления. Благодарю. – Tony

1

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

Это, как говорится, «лучшая практика» по отношению к аутентификации пользователя - это 95% времени для пользователя библиотеки, которую кто-то еще написал и протестировал широко. Просто найдите Google, который подходит для вашей инфраструктуры.

+0

Aha, подтверждение по электронной почте! Я не считал это, но, конечно, это обычная и разумная практика. Благодарю. Что касается использования чужой библиотеки: Конечно, это почти всегда хорошая идея. Тем не менее, сейчас я нахожусь на сцене, где я все еще пытаюсь понять все связанные с этим проблемы. Чтобы сделать это, я лучше всего работаю, написав сам грубый код и немного полируя его, когда я иду. Однако я могу закончить использование внешней библиотеки. Было изобретено колесо аутентификации. Я сомневаюсь, что смогу сделать это кругом. – Tony

Смежные вопросы