PHP и восстановление пароля
Так что я планирую использовать phpass
для хэширования паролей для моей системы аутентификации в php. У меня такой вопрос: как лучше, когда кто-то просит восстановить свой пароль, потому что он забыл его? Вы бы внедрили систему вопросов / ответов и позволили бы им сбросить ее на сайте? Или вы временно сбросили бы их пароль со случайной строкой пароля и отправили бы им по электронной почте? Требование изменить их при следующем входе в систему? Или есть другой, лучший подход?
2 ответа
Запроса / ответов может быть недостаточно, если пользователь выбирает легко угадываемые вопросы или злоумышленник хорошо знает жертву. Многие громкие сайты используют информацию, предоставленную первоначальным пользователем: адрес электронной почты. Отправьте ссылку для сброса пароля на адрес электронной почты и разрешите пользователю сбросить пароль, перейдя по ссылке.
Обратитесь к ответу Джея в разделе " Рекомендации по внедрению восстановления пароля", чтобы узнать, как сделать восстановление пароля более безопасным и почему вопросы безопасности являются плохой идеей.
У Брюса Шнайера также есть мысли на эту тему.
Я бы порекомендовал то, что предложил Дункан.
Однако, что вы не должны делать:
Отправьте пароль - ведь, как уже было сказано, у вас его нет.
Создайте новый временный пароль - это не только небезопасно, как отправка пароля, но также приводит к возможности атаки типа "отказ в обслуживании". Я могу зайти на сайт, притвориться вами, запросить новый пароль, а затем (если вы не проверили свою электронную почту) вы не можете войти в систему, не знаете почему и должны запросить новый пароль.,
Маркер - это, вероятно, путь. Получив его, вы получаете уведомление о запросе забытого пароля, но не предпринимаете никаких действий без вашего подтверждения. Вы также сделаете это одноразовым токеном с относительно коротким сроком действия, чтобы ограничить риск.
Во всяком случае, следует использовать секретный вопрос, чтобы пользователь мог инициировать запрос на сброс пароля. IE Вы должны предоставить свой адрес электронной почты и ответ на секретный вопрос, чтобы отправить запрос на сброс пароля.