Jump to content
  • 0

Восстановление пароля


alex_anderr
 Share

Question

Здрасте.

Хотел уточнить по технологии восстановления пароля.

Я представляю его так.

(В моей БД почта=логину)

Итак:

1. вводишь свою почту в форму восстановления пароля. жмем сабмит (/lostpass/index.php)

2. скрипт проверяет если почта есть, то генерирует и отправляет письмо на твою введенную почту

3. данный скрипт генерирует код подстверждения и записывает его в БД в строку с указанным юзером (электропочтой)

4. в письме код подтверждения и почта. А также ссылка в которой хранится код подтверждения и почта соответственно (для удобства, например, http://mysite.ru/lostpass/lostpass.php?hash=9kzhrz3b34sb&md5&email=bububu@bu.ru)

5. на странице по ссылке проверяются данные кода подтверждения и почты и в случае совпадения идет переадресация на форму ввода нового пароля.(/lostpass/newpassword.php)

6. пользователь вводит новый пароль, подтверждает его и он шифруется и записывается в БД.

Вопросы:

1. Каждый может, по идее, войти на страницу ввода нового пароля и сменить его не затрагивая всю процедуру? (/lostpass/lostpassword.php)

2. И если каждый пользователь хотя бы по разу "восстановит" свой пароль, то в БД в таблице пользователей будут как раз эти коды подтверждения, по которым злоумышленник запросто сменит пароли у нужных ему пользователей если БД попадет к нему в руки. Так? Или код подтверждения (хэш) тоже шифровать с солью пару раз? :)

Спасибо за ответы.

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

[1] Так ты же формируешь код подтверждения. Если он не верен то как человек может на форму попасть?

[2] Так код подтверждения храниться определённое время, т.е. если дата/время формирования кода больше определённого значения, то код недействителен.. И зачем тебе всякое мудрить с солью, md5(time()) вполне достаточно. Ну если не нравится добавь случайное число.

А вообще, я у себя высылаю новый пароль. Если пароль не нравится, то пользователь всегда может зайти и поменять его

ps

и ещё.. Если человеку досталась база данных, то ему не нужно воровать коды подтверждения :rofl:

Edited by Gold Dragon
Link to comment
Share on other sites

  • 0

То есть перейдя по ссылке на форму смены пароля и не выполнив условия форма должна послать его подальше еще раз пройти всю процедуру?

То что он хранится определенное время и хотел узнать. Только time() же не удалит хэш из БД. Значит нужна простенькая функция с sql запросом на удаление его через некоторе время?

Выслать новый пароль проще всего, но его тоже надо подтвердить. Так как человек может при вводе мыла ошибится и сменить пароль не себе :) И здесь, опять же, возвращаемся к истоку.

Link to comment
Share on other sites

  • 0
То есть перейдя по ссылке на форму смены пароля и не выполнив условия форма должна послать его подальше еще раз пройти всю процедуру?
немного не так.. Ты сначала проверяешь все данные, а уж потом решаешь переходить ли на форму смены пароля или посылать ....
То что он хранится определенное время и хотел узнать. Только time() же не удалит хэш из БД. Значит нужна простенькая функция с sql запросом на удаление его через некоторе время?
зачем? в базе у тебя есть (надеюсь что есть) поле где запоминается дата, а значит её легко сравнить с текущей.. Как только Чел прошёл по ссылке и прошла проверка, то запись эту можно удалить.. Ну и предусмотреть отдельную службу для обслуживания таблицы, которая будет удалять записи старше определённого значения. А уж как ты это будешь делать, через cron или "ручками", тебе решать.. У меня, например, в панели управления сайтом есть отдельный раздел, где можно обслуживать такие системы
Выслать новый пароль проще всего, но его тоже надо подтвердить. Так как человек может при вводе мыла ошибится и сменить пароль не себе
Как это может быть? Ты же перед отправкой проверишь у себя в базе существует ли пользователь с таким мылом. Если существует, то отправишь на это мыло пароль и подтверждение.. Другой человек не сможет же получить доступ к не своему мылу
Link to comment
Share on other sites

  • 0

1. А сама страница с формой смены пароля доступна или она доступна по кукам должна быть только, которые выдаются после проверки? Ведь ничего же не мешает зайти на страницу /lostpass/formasmenyparolya.php и там сменить пароль. Хотя если данные проверяются на прошлой странице, то в этой форме будет доступно только поле "новый пароль", но что мешает на основе проверки формы сделать гетзапрос на эту страницу и автоматически подставить любое мыло.

2. Лучше конечно не ручками, знач будем писать дополнительную процедуру обслуживания. А если пользователей несколько тыщ, и половина вдруг забудет пароли каждую вторую неделю месяца. Нене, к черту. Весь мир переходит на автоматическую коробку передач.

3. Так я про подтверждение и говорю. Что без него никак. Иначе просто заспамят сайт и/или наступит интернет анархия на твоем портале.

Link to comment
Share on other sites

  • 0

alex_anderr, у тебя с теорией слабовато.. Ты путаешь серверную часть и клиентскую.. PHP выполняется на сервере, а клиент получает уже готовый HTML.

что тебе мешает на сервере сделать что-то такое?

if(КОД_ПО_ССЫЛКЕ == КОД_ИЗ_БАЗЫ){
показать форму для смены пароля
}else{
послать куда подальше
}

[2]да даже при огромной посещаемости ты за год эту базу не забьёшь :)

Edited by Gold Dragon
Link to comment
Share on other sites

  • 0

alex_anderr, у тебя с теорией слабовато.. Ты путаешь серверную часть и клиентскую.. PHP выполняется на сервере, а клиент получает уже готовый HTML.

Поверь, с практикой не лучше. Но понимать потихоньку надо по долгу службы :)

Хотя я себе так и представлял, но лучше по безопасности уточнить.

[2]да даже при огромной посещаемости ты за год эту базу не забьёшь :)

Для решения этой задачи можно сделать порно сайт :)

Я ж к примеру. А вдруг что если, а что делать если так.. Вроде того.

Спасибо. Второй раз помогаешь.

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy