Напоминание пароля с паролями, зашифрованными по md5

0

Я создаю "Забыли пароль?" страница моего сайта.

Очевидно, что когда новый пользователь создает учетную запись, скрипт php шифрует пароль, выбранный с использованием алгоритма md5.

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

Ниже приведен код, который я использую.

$query2="SELECT password FROM users WHERE email='$email'";
$risultato2 = mysql_query($query2) or die ($query2);
while ($row = mysql_fetch_array($risultato2))
{
     $passToSend = md5($row['password']);
}

echo "<center>We have sent an e-mail to <b>".$email."</b> containing a link to recover your     password.</center>";

$mittente = 'From: "My website" <[email protected]> '; 
$destinatario = $email;  
$oggetto = "Recover your password"; 
$messaggio = "The password you've choosen during the sign up process is: ".$passToSend."\n\nIf    you'd like to change your password, please visit    http://www.mywebsite.com/mydashboard/changepwd.php\n\n Please ignore this message if you haven't requested a password reminder.";                 
mail($destinatario, $oggetto, $messaggio, $mittente);

Что я могу сделать?

Теги:
encryption
passwords
md5

1 ответ

4
Лучший ответ

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

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

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

Удалите токен после сброса пароля, он должен быть одноразовым токеном.

Удалите токены, которые не используются через некоторый период времени (например, 24 часа) с заданием cron.

  • 0
    Лучше было бы хранить только хэш токена, в противном случае злоумышленник с доступом для чтения к базе данных (SQL-инъекция) может запросить сброс, прочитать токен и получить доступ к учетной записи.
  • 0
    Или токен "истекает". Другими словами, обычно оставляйте этот столбец в базе данных пустым и заполняйте его только случайно сгенерированным токеном, когда пользователь запрашивает сброс пароля. Затем столбец следует очистить снова либо после сброса, либо через несколько часов, в зависимости от того, что наступит раньше.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню