Забыли логин - вопрос PHP - PullRequest
       17

Забыли логин - вопрос PHP

0 голосов
/ 05 сентября 2011

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

При создании учетной записи пользователь вводит свои данные (имя, адрес, пароль электронной почты и т. Д.). Я md5 пароли и храню их в базе данных ....

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

Ответы [ 7 ]

1 голос
/ 05 сентября 2011

Вы не посылаете пользователям по электронной почте их пароли.Обычно вы посылаете им по электронной почте новый автоматически сгенерированный временный пароль.

0 голосов
/ 05 сентября 2011

Вот несколько вариантов:

  • Во время регистрации вы можете попросить пользователя настроить «секретные вопросы и ответы».

    • Когда пользователь инициализирует функцию сброса пароля, он может ответить на эти вопросы и сбросить свой пароль.
    • Или, после правильного ответа на вопросы, вы можете отправить ему новый временный пароль по электронной почте.
  • Вы можете отправить им по электронной почте специальную ссылку. Нажав на эту ссылку, они могут установить новый пароль.

0 голосов
/ 05 сентября 2011

Это плохая практика (и практически невозможно после того, как пароль введен на md5) отправлять электронные письма, содержащие пароль пользователя. Один из вариантов:

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

if($_POST['submit'] == 'Send Reset Password Link') {
    if(//User exists & email is valid (check mysql)) {
        $db->prepare('INSERT INTO reset VALUES('', :email, :linkid)');
        //etc...
        mail($email, 'Password Reset for myawesomesite.com', 'Here is your link: http://www.myawesomesite.com/reset.php?id='.$linkid.'&email='.urlencode($email));
        echo "Email sent";
    }
}

reset.php:

if(isset($_GET['id']) && isset($_GET['email'])) {
    $q = $db->prepare('SELECT id FROM reset WHERE email=:email AND linkid=:linkid');
    $q->bindParam(':email', $_GET['email']);
    $q->bindParam(':linkid', $_GET['id']);
    $q->execute();

    if($q->rowCount() == 1) {
        //Show password reset form
    } else {
        echo "Reset link invalid";
    }
}

Тогда вы можете сбросить пароль, используя UPDATE users WHERE email='' SET password=''

EDIT
Я не советую отправлять пользователям временные пароли, если форма забытого пароля не имеет уровня безопасности помимо электронной почты пользователя. Если это не так, любой, кто знает электронную почту пользователя, может сбросить свой пароль. Кроме того, электронные письма обычно не зашифрованы, и я считаю небезопасным отправлять пароли (временные или нет) по электронной почте.

0 голосов
/ 05 сентября 2011

Когда вы используете пароли md5, было бы почти невозможно получить открытый текстовый пароль. Что вам нужно сделать, так это «сбросить» пароль: установите его на что-нибудь другое и отправьте по электронной почте пользователю

0 голосов
/ 05 сентября 2011

Вы заметите, что большинство (уважаемых!) Веб-сайтов позволяют вам только сбросить пароль, но не дают вам старый пароль.

Вот почему:)

0 голосов
/ 05 сентября 2011

Вам вообще не нужно отправлять старый пароль пользователя.

Вы, вероятно, можете отправить ссылку на однократную аутентификацию (при входе пользователя без пароля) или отправить только что созданный пароль.

0 голосов
/ 05 сентября 2011

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

...