Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Восстановления пароля при кодировании функцией md5.
 
 автор: InfernuS   (31.07.2008 в 14:59)   письмо автору
 
 

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

  Ответить  
 
 автор: Axxil   (31.07.2008 в 15:19)   письмо автору
 
   для: InfernuS   (31.07.2008 в 14:59)
 

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

  Ответить  
 
 автор: mihdan   (31.07.2008 в 18:28)   письмо автору
 
   для: InfernuS   (31.07.2008 в 14:59)
 

md5 не декодируется(почти), брутфорсится .... пароль восстановить - глупая затея, проще выслать новый на мыло, указанное при регистрации

  Ответить  
 
 автор: BinLaden   (31.07.2008 в 18:33)   письмо автору
 
   для: mihdan   (31.07.2008 в 18:28)
 

> md5 не декодируется(почти)

Что значит "почти"? Вы - настоящий профессионал, mihdan, и не должны говорить новичкам так, как будто это возможно. Хеш MD5 не декодируется уже хотя бы потому, что MD5 - не кодирование, а хеширование.

  Ответить  
 
 автор: mihdan   (31.07.2008 в 18:40)   письмо автору
 
   для: BinLaden   (31.07.2008 в 18:33)
 

До чего же вы любите к слову придраться-ужас. Написал же почти, потому что можно методом перебора подобрать, тем самым получив исходный пароль, или по вашему я не прав ????????????

  Ответить  
 
 автор: BinLaden   (31.07.2008 в 18:44)   письмо автору
 
   для: mihdan   (31.07.2008 в 18:40)
 

Конечно правы, никто в этом не сомневается. Просто я посмел Вам сделать замечание, чтобы Вы новичку не спутали понятия кодирование, шифрование и хеширование. А то будет каша в голове у человека и Вам спасибо не скажет.

  Ответить  
 
 автор: ddhvvn   (31.07.2008 в 19:12)   письмо автору
 
   для: BinLaden   (31.07.2008 в 18:44)
 

Вы щас ВСЕМ сделали кашу в голове =))))))))

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 22:21)   письмо автору
 
   для: ddhvvn   (31.07.2008 в 19:12)
 

А можно всетаки узнать, как восстанавливть пароль (не генерировать новый)? Его наверное отдельно хранить нужно, чтобы можно было выслать при необходимости?

  Ответить  
 
 автор: BinLaden   (31.07.2008 в 22:25)   письмо автору
 
   для: Николай2357   (31.07.2008 в 22:21)
 

> А можно всетаки узнать, как восстанавливть пароль (не генерировать новый)? Его наверное отдельно хранить нужно, чтобы можно было выслать при необходимости?

Извините, а с какой целью Вы хешируете пароль?

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 22:30)   письмо автору
 
   для: BinLaden   (31.07.2008 в 22:25)
 

Я вообще плохо понимаю эту затею, для чего это нужно? Как успел понять, для того, чтобы не сперли трояном у клиента или не вынули из базы. Темный лес. Если жулик проник в базу, зачем ему уже пароль? А если он у клиента прет, то почему нельзя исходный в базе хранить?
Вообще я очень часто встречаю восстановление пароля на сайтах, а не генерацию новых...

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 22:46)   письмо автору
 
   для: Николай2357   (31.07.2008 в 22:30)
 

Объясните пожалуйста ктонибудь в двух словах, а то глупейшая ситуация: я авторизацию сделал, с хэшами, куками, все как положено, все работает, а для чего - непойму.

  Ответить  
 
 автор: AcidTrash   (31.07.2008 в 22:51)   письмо автору
 
   для: Николай2357   (31.07.2008 в 22:30)
 

>Вообще я очень часто встречаю восстановление пароля на сайтах, а не генерацию новых...

Судя по всему пароли хранятся в явном ввиде.
MD5 - это необратимое хеширование, скажем так расхешировать вы его не сможете.

P. S. Видел варианты перебора хеша, но за небольшое время перебора, максимально можно только расхешировать пароль из 4-х символов и то, если зная количество символов в пароле.

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 22:54)   письмо автору
 
   для: AcidTrash   (31.07.2008 в 22:51)
 

Ну понятно, что в явном виде, кто же станет сам себе проблемы создавать. Непонятно почему нельзя хранить в явном виде и как тогда это у той же AGAV-ы реализовано скажем?

  Ответить  
 
 автор: BinLaden   (31.07.2008 в 22:56)   письмо автору
 
   для: Николай2357   (31.07.2008 в 22:30)
 

> Как успел понять, для того, чтобы не сперли трояном у клиента

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

> Если жулик проник в базу, зачем ему уже пароль?

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

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:00)   письмо автору
 
   для: BinLaden   (31.07.2008 в 22:56)
 

Вот, уже понятней. Я по глупости полагал, что это нужно для защиты от взлома. А про троян я вычитал, что пароль хорошо хранить в куках хэшированным, чтобы троян не попер. Или это тоже чушь?

  Ответить  
 
 автор: BinLaden   (31.07.2008 в 23:05)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:00)
 

Я вообще не понимаю зачем хранить пароль в каком угодно виде на стороне клиента. Разве что для автологина...Но и там можно сгенерировать какой-то ключ.

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:10)   письмо автору
 
   для: BinLaden   (31.07.2008 в 23:05)
 

Именно, мне нужно было, чтобы пользователь мог переходить по нескольким запаролированным страницам, набрав пароль один раз. А про явный вид непонятно всетаки. Как то ведь делают. Очень важный психологический момент - пароль. Многие даже мистически к нему относятся. Загадает любимое число, а тут ему раз - сгенерировали lkhwefwvbosd и запоминай как хочешь.

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:13)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:10)
 

>Загадает любимое число, а тут ему раз - сгенерировали lkhwefwvbosd и запоминай как хочешь.

Никто же не мешает зайти этим lkhwefwvbosd сразу же! И сменить его на свое - дорогое, любимое, личное.

Сервис, позволяющий восстанавливать пароли без повторной генерации, расписывается в том, что его механизмы аутентификации проектировал дилетант.
Есть даже такой метод криптологии "доказательство при нулевом знании", конкретно отвечающий за то, чтобы делать выводы о том, владеет вторая сторона секретом или нет, не зная сам секрет.
Потому что если ты знаешь секрет , ты можешь его выдать. А если не знаешь - выдать не можешь. Максимум, можешь намекнуть, на что он похож. Клиент, который дорожит своим секретом, от этого не пострадает никак.

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:11)   письмо автору
 
   для: Николай2357   (31.07.2008 в 22:30)
 

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

Не удивляет такое количество защиты? Странно...

По Вашему - клиент защищен - сервер защищать не надо.

Трояны и вирусы разные бывают.
И атаки - это не только вирусы с троянами.

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:19)   письмо автору
 
   для: Trianon   (31.07.2008 в 23:11)
 

Надо, вопросов нет. Но хочется красиво. Если клиент забыл пароль - напомнить, а не гонять с непонятными наборами букав туда - сюда. Ну ведь делают как то!

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:22)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:19)
 

>Надо, вопросов нет. Но хочется красиво. Если клиент забыл пароль - напомнить,

Вот напоминая пароль, первым делом Вы клиенту говорите: - Я его знаю.
Понимаете, не только он - клиент, но и еще кто-то.
Хотя по идее, никто кроме него знать не должен.

Кстати, а откуда у Вас уверенность в том, что Вы сообщаете пароль именно клиенту? :)

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:34)   письмо автору
 
   для: Trianon   (31.07.2008 в 23:22)
 

>
>Кстати, а откуда у Вас уверенность в том, что Вы сообщаете пароль именно клиенту? :)
Совсем не убедительно, ведь сгенерированный пароль тоже непонятно кому сообщается :)))

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:37)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:34)
 

[поправлено автором]
Сгенерированный пароль вам! клиент! не называл! никогда!
Это еще не его личная информация!
Есть разница?

  Ответить  
 
 автор: AcidTrash   (31.07.2008 в 23:23)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:19)
 

>Ну ведь делают как то
Как-то? мой пост выше.

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:28)   письмо автору
 
   для: AcidTrash   (31.07.2008 в 23:23)
 

Мне его пароль до лампочки, я и без пароля с его данными все, что угодно сделаю. Любой здравомыслящий человек это понимает, и на то, что я его любимое число знаю, обижаться не станет. А вот если забудет раз, два, а восстанавливать - столько кнопок...
Не думал, что в AGAV-е дилетанты работают, нужно менять хостинг :)
Всетаки я сделал вывод, что пароль лучше иметь в явном виде. Где-нибудь спрятанным может быть... Ну если взломали, придется всем рассылать, то уже мои проблемы.

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:35)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:28)
 

Сытый голодного не розумеет.
Уберите вы этот самый md5, храните парольв открытом виде, передавайте в качестве authenticaton token в кукисах и будьте счастливы.

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:42)   письмо автору
 
   для: Trianon   (31.07.2008 в 23:35)
 

Извените, что потрепал нервы своей тупостью, но помоему большинство клиентов даже и неподозревает о хэшах, кодировках, кукисах и прочем. Это все наносное... Если набрал пароль, значит владелец сайта его знает. Можно написать аршинными буквами, что НЕТ!, все равно никто не поверит.

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:47)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:42)
 

Вероятно, кто-то в агаве рассуждает очень похоже.
Мол, основная масса - быдло , которое ни в чем не рюхает.
А для единиц вкалывать глупо. Тем более что быдлу это будет неудобно.

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:53)   письмо автору
 
   для: Trianon   (31.07.2008 в 23:47)
 

Ну зачем же "быдло"? Нельзя объять необъятное. Просто у людей разный подход. Кто-то старается сделать удобно для клиента, кто-то считает, что безопасность - любой ценой...
Истина наверняка как всегда посередине. Хочется узнать где, а не полемизировать на тему что было раньше, курица или яйцо.

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:55)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:53)
 

не истина только, а компромисс.
Да - он посредине. Но он для каждого - свой.

  Ответить  
 
 автор: Trianon   (31.07.2008 в 23:54)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:42)
 

Между прочим есть немало людей, у которых хороший, стойкий пароль... но один.
На всё. Или на несколько ресурсов.
Потому что тяжело выдумывать и главное - запоминать несколько.
И что будет происходить с таким клиентом у Вас?
А вот что.
В первую очередь, когда пароль клиента сопрут (у Вас , у клиента - не важно) - его попытаются применить ко всему, что о клиенте известно. К почте, к аське, к ЖЖ, ко всему, что найдут.
И если сперли у Вас .... конечно, отвечать перед клиентом Вы не будете. Сам мол дурак...
Он, конечно, дурак, только в дураках его оставили Вы.

  Ответить  
 
 автор: Николай2357   (31.07.2008 в 23:58)   письмо автору
 
   для: Trianon   (31.07.2008 в 23:54)
 

Это довод! Есть над чем задуматься. Убедили. Спасибо.

  Ответить  
 
 автор: Николай2357   (01.08.2008 в 10:01)   письмо автору
 
   для: Николай2357   (31.07.2008 в 23:58)
 

Всю ночь не спал, покоя нет. А по контрольному вопросу можно восстановить, как на Mail например? Используя ответ, как ключ к дешифрации(я не имею в виду md5, может другой есть алгоритм)? Уж очень хочется сделать красиво.

  Ответить  
 
 автор: levsha   (01.08.2008 в 10:48)   письмо автору
 
   для: Николай2357   (01.08.2008 в 10:01)
 

Да вообще то восстановление так и делают, в базе хранится не хеш, а зашифрованная версия пароля, посмотрите функции библиотеки mcrypt, например mcrypt_ecb().

  Ответить  
 
 автор: Николай2357   (01.08.2008 в 10:53)   письмо автору
 
   для: levsha   (01.08.2008 в 10:48)
 

Спасибо большое, буду разбираться.

  Ответить  
 
 автор: Николай2357   (01.08.2008 в 14:12)   письмо автору
 
   для: Николай2357   (01.08.2008 в 10:53)
 

Боюсь опять напартачить, подскажите, где тут тонко?
Придумал я такой компромисс: Нужно на мыло юзеру отправлять не сам сгенерированный новый пароль, а ссылку плана
<a href='страница восстановления?pass=абракадабра'>пройдите, восстановите</a>,
а там пусть пишет свое, родное.
Спасибо.

  Ответить  
 
 автор: GeorgeIV   (01.08.2008 в 14:19)   письмо автору
 
   для: Николай2357   (01.08.2008 в 14:12)
 

Зачем на мыло отправлять? На сайтах есть ссылочка - "Забыли пароль?", которая едет на страницу восстановления пароля

  Ответить  
 
 автор: Николай2357   (01.08.2008 в 14:38)   письмо автору
 
   для: GeorgeIV   (01.08.2008 в 14:19)
 

Ну ведь на мыло ссылка на его личную страницу, там сразу написал новый и все.

  Ответить  
 
 автор: BinLaden   (01.08.2008 в 14:40)   письмо автору
 
   для: Николай2357   (01.08.2008 в 14:38)
 

Я не понимаю, зачем Вы хотите передавать текущий пароль в ссылке? Кому от этого легче? Тогда уже сразу скажите его пользователю, а не устраивайте карусель:)

  Ответить  
 
 автор: GeorgeIV   (01.08.2008 в 14:50)   письмо автору
 
   для: Николай2357   (01.08.2008 в 14:38)
 

а если я мыло подменил? или у меня сменилась почта?

  Ответить  
 
 автор: Николай2357   (01.08.2008 в 15:20)   письмо автору
 
   для: GeorgeIV   (01.08.2008 в 14:50)
 

Какэто "мыло подменил"? Можно подробней? А если сам сменил, тогда только через администратора. Как по другому? Сгенерированный пароль все равно сообщить както нужно. Мне кажется, что лучше не пугать клиента непонятными "Ваш временный пароль:lhglhliljhv", а написать "Для входа на Вашу страницу воспользуйтесь этой ссылкой"

  Ответить  
 
 автор: InfernuS   (01.08.2008 в 14:46)   письмо автору
 
   для: GeorgeIV   (01.08.2008 в 14:19)
 

Тогда не понятно, а как это реализуют, например на яндексе или мэйли. Другой алгоритм?
Или они не шифруют когда заносят в базу?
Вообще я слышал, что дешифруются: ГОСТ_28147-89, 3DES и IDEA. Только вот не знаю применяют их в стандартных php кодах или нет?
levsha
Можно поподробнее про функции библиотеки mcrypt.

  Ответить  
 
 автор: levsha   (01.08.2008 в 15:20)   письмо автору
 
   для: InfernuS   (01.08.2008 в 14:46)
 

Функция mcrypt_ecb ( int cipher, string key, string data, int mode )
Первый параметр - тип шифрования, например MCRYPT_3DES
Второй ключ - Секретный ответ,
Третий параметр - Данные (в вашем случа пароль),
Четвертый - режим - зашифровать MCRYPT_ENCRYPT или расшифровать MCRYPT_DECRYPT.
В базе данных для пароля создайте два поля.
Первое будет хранить хеш пароля md5.
Второе будет хранить зашифрованный пароль, ключом является секретный ответ (или вопрос - ответ вместе).

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

  Ответить  
 
 автор: InfernuS   (21.10.2008 в 21:50)   письмо автору
 
   для: levsha   (01.08.2008 в 15:20)
 

А можно по-подробнее. С примером, желательно. А то не совсем понятно.

Никак не могу понять-как лучше осуществить опцию восстановления пароля.
Есть база данных bd с таблицей reg в ней поля login, password, mail.
Пароль сохраняется криптованный md5.
Хэш md5 расшифровать нельзя. Приходится искать варианты.

Если я правильно понимаю логику:
1 Вывожу форму восстановления. Предлогаю пользователю ввести логин или мыло.
2 Проверяю их на соответствие в базе.
3 Если они верны- генерирую новый пароль.
4 Новый пароль хэширую md5 и заменяю старый(в базе) на новый для этого пользователя.
5 Не хэшированную версию отправляю юзеру на мыло.

Позднее юзер в своем профиле сможет сменить пароль на какой он захочет.

Или лучше вариант предложенный levsha двумя постами выше?
Поделитесь опытом. Срочно нужно сделать, а как не могу решить.
Я склоняюсь ко второму(от b]levsha[/b]). Но пока еще не совсем предсталяю код.

Заранее благодарен за помощь.

  Ответить  
 
 автор: Keyses   (16.07.2009 в 13:24)   письмо автору
 
   для: levsha   (01.08.2008 в 15:20)
 

Тема старая, но всё же интересен один нюанс:
Вариант предложенный levsha более чем хорош, но вот как быть если пользователь не хочет вводить секретный вопрос? Тупо отсылать ему новый пароль или сразу перенаправлять на страницу ввода нового пароля, через ссылку из письма скинутого на e-mail?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования