Механизм восстановления пароля пользователям.

  • Автор темы Автор темы asics
  • Дата начала Дата начала

asics

Новичок
Механизм восстановления пароля пользователям.

Хэши паролей хранятся в табличке с логинами и мэйлами.

Думаю сделать восстановление забытых паролей таким образом:

Юзер жмет "Забыл пароль" > вводит в форму логин или емайл > cкрипт создает случайную комбинацию "sdrfg2erg5dg5gdg", заносит её в базу данных в ячейку 'remind' строки этого юзера и отправляет ему на почту письмо "Можете задать новый пароль на странице http://url.ru/remind.php?nom=sdrfg2erg5dg5gdg"


Когда юзер переходит по ссылке из письма на страницу http://url.ru/remind.php скрипт смотрит есть ли в базе строка с полем remind=sdrfg2erg5dg5gdg, если есть, предлагает задать новый пароль для логина в строке которого найден remind=sdrfg2erg5dg5gdg.

Имеет право на жизнь такая схема?
 
asics
+ не забыть обнулить поле remind после смены пароля

-~{}~ 29.01.10 14:54:

Автор оригинала: asics
Может есть более изящная схема?
сразу заменить пароль на случайный и прислать его, вся изящность только в отсутствии необходимости дополнительного поля
 
смущает, что с восстановлением паролей смысл хеширования паролей теряется, если кто-то через sql-иньекцию сможет читать/писать в базу он поставит свой емайл и запросит туда пароль... Может тогда и не хешировать?Пароли чистые хранить?
 
asics
при чем тут иньекция и твой первоначальный вопрос? Надо писать код без дырок. Да и если есть такая дырка, то пароль запрашивать не надо, достаточно будет переписать хэш пароля и все.
 
. Может тогда и не хешировать?Пароли чистые хранить?
тогда еще больше вероятность утечки

хешировать надо с солью, md5( $psw+ $salt ) где $salt - некая предопределенная константа
 
>> хешировать надо с солью, md5( $psw+ $salt ) где $salt - некая предопределенная константа
$salt не обязательно должна быть константой. Можно хранить кроме пароля и соль. При установке/смене пароля генерируется соль, затем используя соль генерируется хеш пароля

>> Можно хранить кроме пароля и соль
Имел ввиду хеш пароля.
 
Тогда смысл соли теряется, если ее хранить тут же с хешем. Все равно что ПИН на карточке писать.
 
Я бы сделал солью 1-3-5-7-9 символы хэша пароля. Просто зная что это так, всегда знаешь что за соль у пользователя и определенным хэшем, а сама соль переменная величина. Я неправ?
 
Тогда смысл соли теряется, если ее хранить тут же с хешем
Почему теряется ?
$hash = md5( $psw.$salt );
Допустим, что известен $salt и $hash. MD5 - это функция с односторонним шифрованием. Пароль никак не вычислишь.
Я неправ ?
 
$hash = md5( $psw );
Допустим, что известен $hash. MD5 - это функция с односторонним шифрованием. Пароль никак не вычислишь.
В чем разница?

(в принципе, она есть, но сначала логика)
 
prolis
поддержу мнение о замене пароля сразу.
1. сохранится тот же механизм шифрования, что используется и для основной авторизации
2. будет использоваться таже логика авторизации, что и при стандартном входе
3. для входа будут использованы 2 параметра один из которых шифруется (логин, новый_пароль), вместо одного незашифрованного "remind"
ИМХО всё это значительно лучше.
 
Фaнaт
разница в том, что по словарям и часто встречающимся последовательностям давно есть готовые базы hash => значение (http://www.stottmeister.com/blog/2009/04/14/how-to-crack-md5-passwords/), наличие соли (особенно разной под каждый пароль, пусть даже она рядом хранится) эту проблему решает.
 
Sigorma
как сечас вижу, ключ для вконтакта, ключ для фейсбука, ключ для баду, ключ для дома, ключ от сортира, ключ от кофеварки)))

-~{}~ 29.01.10 17:43:

Хотя на сколько я помню ключики типа hasp были ранее, но успехом не пользовались.
 
Сверху