PHP
Простейшее восстановление пароля.
Здравствуйте, пытаюсь делать простейшее восстановление пароля, но письмо приходит с кэш. паролем 32 знака. Войти на сайт с таким паролем не получается. Если убрать кэширование при регистрации, то восстановление работает. Я знаю что это уже давно никто так не делает. Я просто не могу еще сделать временную ссылку с токеном. Может как то здесь прописать - \ Ваш пароль: '.$rr['pass'].' \ Чтобы приходило письмо не такое - \ Ваш пароль: 0599a1e1ce3968d52cb814533fb93133 \ ?
> Если убрать кэширование при регистрации, то восстановление работает
и в чём же тогда проблема?
да, и кстати: это хеширование, а не кеширование
cache и hash - разные слова, обозначающие разные вещи
и в чём же тогда проблема?
да, и кстати: это хеширование, а не кеширование
cache и hash - разные слова, обозначающие разные вещи
В нормальной БД пароль не содержится как раз для того, чтобы нельзя было его заполучить. При запросе восстановления генерируется новый. Он и высылается в письме.
Саша Сургай
Это еще, как вариант. У меня сейчас пароль хранится в БД в хешированном виде 32 знака. При запросе на восстановление отправляет все 32 знака. Какой вариант по проще ?
Если в строке $rr['pass'] у тебя содержится строка вида 0599a1e1ce3968d52cb814533fb93133 а она у тебя там содержится то это скорее всего md5 хэш а значит из нее обратно пароль получить нельзя. Можно только проверить тот пароль или не тот, потому что прожевав через хеширование тот же самый пароль как в первый раз- 32 символа хеша будут такие же как тогда когда они записывались в базу, обратно из них пароль получить нельзя, потому что нет математических решений. Ну например для контрольных сумм :10/2=5 5/2= 2.5 5+2.5=7.5 тоесть в базе 7.5 а пароль 10. Если знаешь 7.5 то 10 не получишь никак но зато если пользователь введёт 10 и у тебя получится 7.5 значит пароль верный. По этому для восстановления пароля делают так : пользователь вводит email по этому, email ищется юзер, этому юзеру записывается в столбец токен какая то уникальная строка а на почту шлется письмо с GET параметром равным этой строке далее если пользователь из письма переходит по ссылке он попадает на страницу восстановления пароля где по уникальной стррке ищется пользователь в базе и ему записывается новый хеш от пароля который вводит человек на странице восстановления пароля. В результате такой схемы проверяется email гарантируется что пароль не стырят так как письмо со ссылкой на восстановление приходит на почту. Плюс контрольные суммы это слишком просто (здесь для наглядного примера привел) в них слишком много коллизий и md5 тоже слишком просто поэтому сейчас пароли делают солёными это некий набор букв который добавляется к хеширкемой строке который в случае с проверкой будет точно такой же как на этапе создания пароля
Саша Сургай
Попробовал еще раз по урокам сделать восстановление пароля, не чего не получилось. Прдется все таки свой доводить до ума. У меня сейчас так - Пользователь нажимает ,,Забыл пароль,, появляется окно с прсьбой ввести 'email'. Проверяется 'email' по базе, если есть таков, отправляется ссылка для восстановления пароля, на почту. Пройдя по ссылке открывается окно для введения нового пароля. Вот до этой минуты все работает, а дальше у меня просто записывает новый пароль рядом, под этот же 'email' , но старый не удаляет. Войти под новым паролем не получается, только под старым. Я понимаю, что это не лучший вариант, но хотя бы пока это довести до ума. Ели есть у кого время под учить меня, по договоренности ?
шифрование кэшом работает в одну сторону, расшифровать это нельзя, пиши свой алгоритм шифровки и дешифровки
простой алгоритм восстановления:
пользователь запрашивает восстановление указывает логин
по логину из бд вытаскиваешь его зашифрованный пароль
дешефруешь
посылаешь на электронную почту
простой алгоритм восстановления:
пользователь запрашивает восстановление указывает логин
по логину из бд вытаскиваешь его зашифрованный пароль
дешефруешь
посылаешь на электронную почту
Саша Сургай
Да, спасибо street magic, этот вариант мне наверное и надо. Хотя я с ним то же не знаком. Как пишется свой алгоритм шифровки и дешифровки? Может есть ссылка на сайт, почитать ?
Денис Ренёв
не "кэшом" а хэшем, и это не шифрование, а хэширование
В БД у тебя пароль хранится в виде хэша. Вспомни, как происходит регистрация:
1. login = "...", password = "..."
2. hash = hash_password(password) # хэшируешь пароль
3. INSERT INTO users VALUES (login, hash);
А при восстановлении пароля тебе нужно сделать почти то же самое, но посылать пароль на почту нужно ДО хэширования:
1. login = "...", new_password = "..."
2. send_mail(new_password, ..) # отправляешь новый пароль на почту
3. hash = hash_password(new_password) # хэшируешь пароль
4. UPDATE users SET password=hash WHERE login=login
PS Но лучше сделать так: при восстановлении пароля просим пользователя ввести логин и новый пароль, на почту ему присылаем уникальный код и просим ввести этот код. Затем, сравниваем введенный код с отправленным, потом хэшируем пароль и обновляем запись в БД
1. login = "...", password = "..."
2. hash = hash_password(password) # хэшируешь пароль
3. INSERT INTO users VALUES (login, hash);
А при восстановлении пароля тебе нужно сделать почти то же самое, но посылать пароль на почту нужно ДО хэширования:
1. login = "...", new_password = "..."
2. send_mail(new_password, ..) # отправляешь новый пароль на почту
3. hash = hash_password(new_password) # хэшируешь пароль
4. UPDATE users SET password=hash WHERE login=login
PS Но лучше сделать так: при восстановлении пароля просим пользователя ввести логин и новый пароль, на почту ему присылаем уникальный код и просим ввести этот код. Затем, сравниваем введенный код с отправленным, потом хэшируем пароль и обновляем запись в БД
Саша Сургай
Разве так получится? Попробую, но у меня даже при регистрации отправляет пароль пользователю хешированный, а выводит на экран не хешированный. Спасибо Иван Иванов.
Похожие вопросы
- Алгоритм для восстановления пароля через Email.
- Хеширование пароля php
- Восстановление пароля ICQ
- PHP - как сделать на сайте "восстановление пароля", если пароли в бд хранятся в виде md5 хеш кодов?
- восстановление пароля ICQ
- Не могли бы Вы помочь с восстановление пароля ICQ?
- Взломали в страничку ВКонтакте, для восстановления пароля просят отправить СМС...
- Насчет восстановления пароля в ICQ внутри
- Восстановление пароля icq