алкоголь - зло, это точно

можно, но в меру.
-~{}~ 30.05.09 02:44:
вот только что изобрел велосипед, по-моему, но мыслями поделюсь.
Рассмотрим вариант, когда необходимо держать пароли в базе ТОЛЬКО в форме хеша и нужно дать юзеру возможность менять пароль по ссылке, которая придет на мыло.
1. Пользователь отправляет заявку на смену пароля.
- Заявке генерируется уникальный хеш и пишется в отдельную таблицу, где также в поле пишется ID пользователя и time()+какой-то интервал активности с момента создания.
2. Пользователь открывает полученное письмо и идет по ссылке с хешем (сгенер. в п.1)
3. Скрипт ищет в таблице с заявками соответствующую запись по хешу, пришедшему через GET
- в случае существования записи либо логиним юзера, либо отдаем ему форму на смену пароля
- пароль по факту поста формы меняем именно тому ID, который указан в таблице с заявкой.
4. По факту смены пароля убиваем из заявок все записи по id пользователя (заявка может быть не одна, если временной интервал по смене пароля был просрочен для какой-то из них)
Что мы имеем:
1. Никаких дополнительных ключей, соли и записей в базу в основные таблицы и никаких передач личных данных юзера по ссылке.
2. Только владелец почтового ящика может получить ссылку (юзер сам ввел свой адрес для получения ссылки).
3. Если юзер забыл удалить сообщение (оно осталось у него в корзине, продублировалось на левый e-mail и т.д.), то хеш, указанный в ссылке ничего не даст, т.к. он принадлежит заявке, которая удаляется из базы по факту смены пароля, либо по истечению, например, 5 минут. Т.е. если уж кому-то и нужен сильно пароль, то он должен ловить юзера в минуты его смены!
Остаются лишь вопросы по автоматической чистке базы, ведь рано или поздно, там будут оставаться активные заявки, к которым так и не обратились.
Но этот вопрос вполне легко решить разными методами.
Ну и, конечно же, безопасность самого почтового ящика может гарантировать только пользователь.
p.s. главное, что сервер никаких личных данных не отдает по этому запросу, пусть даже в виде хеша...