2010-10-24 2 views
3

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

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

ответ

2

Одним из способов было бы создание хэша MD5 информации о пользователе, предоставленной для использования в качестве пароля.

$name = "sushil bharwani"; 
$email = "[email protected]"; 
$pass = md5($name . $email); 

Что бы получить вам строку, таких как 1f3870be274f6c49b3e31a0c6728957f. Поскольку функция MD5 всегда будет создавать один и тот же вывод с данного входа, теоретически возможно, что кто-то, кто знал вас, регистрировался, какие поля были необходимы и что вы, скорее всего, вложили бы в них, могли бы догадаться о хеше MD5, который был бы отправил вам. Это можно было бы смягчить, добавив случайное число на вход до md5, но, если вы не работаете в тайном правительственном агентстве, вряд ли кто-то будет заботиться об этом, чтобы все равно попытаться это сделать.

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

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

Что касается временного части, просто использовать метку времени для записи при создании пароля и использовать cronjob, чтобы удалить все старше x дней, которые не были изменены.

+0

Спасибо за ваш ответ. Я хочу знать риски с помощью способа md5 генерации временных паролей для пользователя. И можете ли вы предложить больше способов. Мне нравится ваш ответ. –

+0

При создании хэша вы всегда должны использовать уникальную соль md5 ($ salt.$ Имя $ электронная почта). , Более того, я прочитал шифрование sha1 лучше, так как в огромной базе данных хеширование md5 оказалось не уникальным. – Rishabh

+0

Никогда не отправляйте ничего по электронной почте. Когда-либо. –

1

Ну, если у Вас есть что-то, где их пароль хранится, я воображал, что вы используете базу данных для хранения все это.

Так что вы могли бы сделать, это создать новую таблицу, которая содержит просто временные пароли. Затем, когда пользователь нажимает на ссылку, чтобы получить временный пароль, создайте случайную строку, а затем срок действия истекает примерно через час или около того. Для этого просто найдите время и добавьте час на него. Затем сохраните новый временный пароль, время его истечения, а пользователь - в строку в таблице для временных паролей.

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

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

Это как раз то, как хранить и использовать их. Надеюсь, поможет!

+0

@thanks krej вы можете предложить мне несколько способов генерации временных паролей и обеспечить их безопасность. Как я помню, один из сайтов предоставляет временные пароли, которые похожи на определенное количество пользователей, но это не безопасный способ (я думаю, так) –

+0

Создайте длинную случайную строку. Это делает большой временный пароль. Тогда не отправляйте их в любом месте ненадежным. Что значит «держать их в безопасности»? – Slartibartfast