|
|
|
| Здравствуйте. У меня такой вопрос. Я хочу сделать у себя на ресурсе функцию восстановления пароля. Но если я его кодирую методом md5 перед занесением в базу как мне его декодировать, что бы отослать пользователю на почту по его запросу? Подскажите, пожалуйста, возможно ли это реализовать или это делается как-то по-другому? | |
|
|
|
|
|
|
|
для: InfernuS
(31.07.2008 в 14:59)
| | По-другому.
Пользователю генерируется и высылается новый пароль.
Если на сайте предусмотрена персональная страница, то впоследствии юзер может там поменять пароль. | |
|
|
|
|
|
|
|
для: InfernuS
(31.07.2008 в 14:59)
| | md5 не декодируется(почти), брутфорсится .... пароль восстановить - глупая затея, проще выслать новый на мыло, указанное при регистрации | |
|
|
|
|
|
|
|
для: mihdan
(31.07.2008 в 18:28)
| | > md5 не декодируется(почти)
Что значит "почти"? Вы - настоящий профессионал, mihdan, и не должны говорить новичкам так, как будто это возможно. Хеш MD5 не декодируется уже хотя бы потому, что MD5 - не кодирование, а хеширование. | |
|
|
|
|
|
|
|
для: BinLaden
(31.07.2008 в 18:33)
| | До чего же вы любите к слову придраться-ужас. Написал же почти, потому что можно методом перебора подобрать, тем самым получив исходный пароль, или по вашему я не прав ???????????? | |
|
|
|
|
|
|
|
для: mihdan
(31.07.2008 в 18:40)
| | Конечно правы, никто в этом не сомневается. Просто я посмел Вам сделать замечание, чтобы Вы новичку не спутали понятия кодирование, шифрование и хеширование. А то будет каша в голове у человека и Вам спасибо не скажет. | |
|
|
|
|
|
|
|
для: BinLaden
(31.07.2008 в 18:44)
| | Вы щас ВСЕМ сделали кашу в голове =)))))))) | |
|
|
|
|
|
|
|
для: ddhvvn
(31.07.2008 в 19:12)
| | А можно всетаки узнать, как восстанавливть пароль (не генерировать новый)? Его наверное отдельно хранить нужно, чтобы можно было выслать при необходимости? | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 22:21)
| | > А можно всетаки узнать, как восстанавливть пароль (не генерировать новый)? Его наверное отдельно хранить нужно, чтобы можно было выслать при необходимости?
Извините, а с какой целью Вы хешируете пароль? | |
|
|
|
|
|
|
|
для: BinLaden
(31.07.2008 в 22:25)
| | Я вообще плохо понимаю эту затею, для чего это нужно? Как успел понять, для того, чтобы не сперли трояном у клиента или не вынули из базы. Темный лес. Если жулик проник в базу, зачем ему уже пароль? А если он у клиента прет, то почему нельзя исходный в базе хранить?
Вообще я очень часто встречаю восстановление пароля на сайтах, а не генерацию новых... | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 22:30)
| | Объясните пожалуйста ктонибудь в двух словах, а то глупейшая ситуация: я авторизацию сделал, с хэшами, куками, все как положено, все работает, а для чего - непойму. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 22:30)
| | >Вообще я очень часто встречаю восстановление пароля на сайтах, а не генерацию новых...
Судя по всему пароли хранятся в явном ввиде.
MD5 - это необратимое хеширование, скажем так расхешировать вы его не сможете.
P. S. Видел варианты перебора хеша, но за небольшое время перебора, максимально можно только расхешировать пароль из 4-х символов и то, если зная количество символов в пароле. | |
|
|
|
|
|
|
|
для: AcidTrash
(31.07.2008 в 22:51)
| | Ну понятно, что в явном виде, кто же станет сам себе проблемы создавать. Непонятно почему нельзя хранить в явном виде и как тогда это у той же AGAV-ы реализовано скажем? | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 22:30)
| | > Как успел понять, для того, чтобы не сперли трояном у клиента
Откуда Вы сделали такой вывод? На мой взгляд, трояну без разницы в каком виде хранится пароль на сервере, если сам он располагается на машине пользователя.
> Если жулик проник в базу, зачем ему уже пароль?
Лучше говорить "пароли", а не "пароль". Неужели Вы не можете сами придумать что можно сделать с паролями, после того как будет устранена уязвимость? Воспользоваться по прямому назначению, например. Ведь далеко не все пользователи их быстро сменят, они могут о взломе ничего и не знать. | |
|
|
|
|
|
|
|
для: BinLaden
(31.07.2008 в 22:56)
| | Вот, уже понятней. Я по глупости полагал, что это нужно для защиты от взлома. А про троян я вычитал, что пароль хорошо хранить в куках хэшированным, чтобы троян не попер. Или это тоже чушь? | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:00)
| | Я вообще не понимаю зачем хранить пароль в каком угодно виде на стороне клиента. Разве что для автологина...Но и там можно сгенерировать какой-то ключ. | |
|
|
|
|
|
|
|
для: BinLaden
(31.07.2008 в 23:05)
| | Именно, мне нужно было, чтобы пользователь мог переходить по нескольким запаролированным страницам, набрав пароль один раз. А про явный вид непонятно всетаки. Как то ведь делают. Очень важный психологический момент - пароль. Многие даже мистически к нему относятся. Загадает любимое число, а тут ему раз - сгенерировали lkhwefwvbosd и запоминай как хочешь. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:10)
| | >Загадает любимое число, а тут ему раз - сгенерировали lkhwefwvbosd и запоминай как хочешь.
Никто же не мешает зайти этим lkhwefwvbosd сразу же! И сменить его на свое - дорогое, любимое, личное.
Сервис, позволяющий восстанавливать пароли без повторной генерации, расписывается в том, что его механизмы аутентификации проектировал дилетант.
Есть даже такой метод криптологии "доказательство при нулевом знании", конкретно отвечающий за то, чтобы делать выводы о том, владеет вторая сторона секретом или нет, не зная сам секрет.
Потому что если ты знаешь секрет , ты можешь его выдать. А если не знаешь - выдать не можешь. Максимум, можешь намекнуть, на что он похож. Клиент, который дорожит своим секретом, от этого не пострадает никак. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 22:30)
| | У Вас на квартирной двери замок висит?
А магазин, в который Вы ходили вчера за продуктами, на ночь запирается?
А инкассаторская машина, которая забирала выручку магазина, та вообще сплошь броней обшита.
Не удивляет такое количество защиты? Странно...
По Вашему - клиент защищен - сервер защищать не надо.
Трояны и вирусы разные бывают.
И атаки - это не только вирусы с троянами. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2008 в 23:11)
| | Надо, вопросов нет. Но хочется красиво. Если клиент забыл пароль - напомнить, а не гонять с непонятными наборами букав туда - сюда. Ну ведь делают как то! | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:19)
| | >Надо, вопросов нет. Но хочется красиво. Если клиент забыл пароль - напомнить,
Вот напоминая пароль, первым делом Вы клиенту говорите: - Я его знаю.
Понимаете, не только он - клиент, но и еще кто-то.
Хотя по идее, никто кроме него знать не должен.
Кстати, а откуда у Вас уверенность в том, что Вы сообщаете пароль именно клиенту? :) | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2008 в 23:22)
| | >
>Кстати, а откуда у Вас уверенность в том, что Вы сообщаете пароль именно клиенту? :)
Совсем не убедительно, ведь сгенерированный пароль тоже непонятно кому сообщается :))) | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:34)
| | [поправлено автором]
Сгенерированный пароль вам! клиент! не называл! никогда!
Это еще не его личная информация!
Есть разница? | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:19)
| | >Ну ведь делают как то
Как-то? мой пост выше. | |
|
|
|
|
|
|
|
для: AcidTrash
(31.07.2008 в 23:23)
| | Мне его пароль до лампочки, я и без пароля с его данными все, что угодно сделаю. Любой здравомыслящий человек это понимает, и на то, что я его любимое число знаю, обижаться не станет. А вот если забудет раз, два, а восстанавливать - столько кнопок...
Не думал, что в AGAV-е дилетанты работают, нужно менять хостинг :)
Всетаки я сделал вывод, что пароль лучше иметь в явном виде. Где-нибудь спрятанным может быть... Ну если взломали, придется всем рассылать, то уже мои проблемы. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:28)
| | Сытый голодного не розумеет.
Уберите вы этот самый md5, храните парольв открытом виде, передавайте в качестве authenticaton token в кукисах и будьте счастливы. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2008 в 23:35)
| | Извените, что потрепал нервы своей тупостью, но помоему большинство клиентов даже и неподозревает о хэшах, кодировках, кукисах и прочем. Это все наносное... Если набрал пароль, значит владелец сайта его знает. Можно написать аршинными буквами, что НЕТ!, все равно никто не поверит. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:42)
| | Вероятно, кто-то в агаве рассуждает очень похоже.
Мол, основная масса - быдло , которое ни в чем не рюхает.
А для единиц вкалывать глупо. Тем более что быдлу это будет неудобно. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2008 в 23:47)
| | Ну зачем же "быдло"? Нельзя объять необъятное. Просто у людей разный подход. Кто-то старается сделать удобно для клиента, кто-то считает, что безопасность - любой ценой...
Истина наверняка как всегда посередине. Хочется узнать где, а не полемизировать на тему что было раньше, курица или яйцо. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:53)
| | не истина только, а компромисс.
Да - он посредине. Но он для каждого - свой. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:42)
| | Между прочим есть немало людей, у которых хороший, стойкий пароль... но один.
На всё. Или на несколько ресурсов.
Потому что тяжело выдумывать и главное - запоминать несколько.
И что будет происходить с таким клиентом у Вас?
А вот что.
В первую очередь, когда пароль клиента сопрут (у Вас , у клиента - не важно) - его попытаются применить ко всему, что о клиенте известно. К почте, к аське, к ЖЖ, ко всему, что найдут.
И если сперли у Вас .... конечно, отвечать перед клиентом Вы не будете. Сам мол дурак...
Он, конечно, дурак, только в дураках его оставили Вы. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2008 в 23:54)
| | Это довод! Есть над чем задуматься. Убедили. Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(31.07.2008 в 23:58)
| | Всю ночь не спал, покоя нет. А по контрольному вопросу можно восстановить, как на Mail например? Используя ответ, как ключ к дешифрации(я не имею в виду md5, может другой есть алгоритм)? Уж очень хочется сделать красиво. | |
|
|
|
|
|
|
|
для: Николай2357
(01.08.2008 в 10:01)
| | Да вообще то восстановление так и делают, в базе хранится не хеш, а зашифрованная версия пароля, посмотрите функции библиотеки mcrypt, например mcrypt_ecb(). | |
|
|
|
|
|
|
|
для: levsha
(01.08.2008 в 10:48)
| | Спасибо большое, буду разбираться. | |
|
|
|
|
|
|
|
для: Николай2357
(01.08.2008 в 10:53)
| | Боюсь опять напартачить, подскажите, где тут тонко?
Придумал я такой компромисс: Нужно на мыло юзеру отправлять не сам сгенерированный новый пароль, а ссылку плана
<a href='страница восстановления?pass=абракадабра'>пройдите, восстановите</a>,
| а там пусть пишет свое, родное.
Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(01.08.2008 в 14:12)
| | Зачем на мыло отправлять? На сайтах есть ссылочка - "Забыли пароль?", которая едет на страницу восстановления пароля | |
|
|
|
|
|
|
|
для: GeorgeIV
(01.08.2008 в 14:19)
| | Ну ведь на мыло ссылка на его личную страницу, там сразу написал новый и все. | |
|
|
|
|
|
|
|
для: Николай2357
(01.08.2008 в 14:38)
| | Я не понимаю, зачем Вы хотите передавать текущий пароль в ссылке? Кому от этого легче? Тогда уже сразу скажите его пользователю, а не устраивайте карусель:) | |
|
|
|
|
|
|
|
для: Николай2357
(01.08.2008 в 14:38)
| | а если я мыло подменил? или у меня сменилась почта? | |
|
|
|
|
|
|
|
для: GeorgeIV
(01.08.2008 в 14:50)
| | Какэто "мыло подменил"? Можно подробней? А если сам сменил, тогда только через администратора. Как по другому? Сгенерированный пароль все равно сообщить както нужно. Мне кажется, что лучше не пугать клиента непонятными "Ваш временный пароль:lhglhliljhv", а написать "Для входа на Вашу страницу воспользуйтесь этой ссылкой" | |
|
|
|
|
|
|
|
для: GeorgeIV
(01.08.2008 в 14:19)
| | Тогда не понятно, а как это реализуют, например на яндексе или мэйли. Другой алгоритм?
Или они не шифруют когда заносят в базу?
Вообще я слышал, что дешифруются: ГОСТ_28147-89, 3DES и IDEA. Только вот не знаю применяют их в стандартных php кодах или нет?
levsha
Можно поподробнее про функции библиотеки mcrypt. | |
|
|
|
|
|
|
|
для: InfernuS
(01.08.2008 в 14:46)
| | Функция mcrypt_ecb ( int cipher, string key, string data, int mode )
Первый параметр - тип шифрования, например MCRYPT_3DES
Второй ключ - Секретный ответ,
Третий параметр - Данные (в вашем случа пароль),
Четвертый - режим - зашифровать MCRYPT_ENCRYPT или расшифровать MCRYPT_DECRYPT.
В базе данных для пароля создайте два поля.
Первое будет хранить хеш пароля md5.
Второе будет хранить зашифрованный пароль, ключом является секретный ответ (или вопрос - ответ вместе).
Возможный вариант восстановления.
Пользователь вводит секретный ответ, он является ключом к зашифрованному паролю, получаем пароль, далее с него снимаем хеш md5, если этот хеш идентичен хешу в базе данных выдаем пароль, иначе ошибку.
Что не понятно спрашивайте. | |
|
|
|
|
|
|
|
для: levsha
(01.08.2008 в 15:20)
| | А можно по-подробнее. С примером, желательно. А то не совсем понятно.
Никак не могу понять-как лучше осуществить опцию восстановления пароля.
Есть база данных bd с таблицей reg в ней поля login, password, mail.
Пароль сохраняется криптованный md5.
Хэш md5 расшифровать нельзя. Приходится искать варианты.
Если я правильно понимаю логику:
1 Вывожу форму восстановления. Предлогаю пользователю ввести логин или мыло.
2 Проверяю их на соответствие в базе.
3 Если они верны- генерирую новый пароль.
4 Новый пароль хэширую md5 и заменяю старый(в базе) на новый для этого пользователя.
5 Не хэшированную версию отправляю юзеру на мыло.
Позднее юзер в своем профиле сможет сменить пароль на какой он захочет.
Или лучше вариант предложенный levsha двумя постами выше?
Поделитесь опытом. Срочно нужно сделать, а как не могу решить.
Я склоняюсь ко второму(от b]levsha[/b]). Но пока еще не совсем предсталяю код.
Заранее благодарен за помощь. | |
|
|
|
|
|
|
|
для: levsha
(01.08.2008 в 15:20)
| | Тема старая, но всё же интересен один нюанс:
Вариант предложенный levsha более чем хорош, но вот как быть если пользователь не хочет вводить секретный вопрос? Тупо отсылать ему новый пароль или сразу перенаправлять на страницу ввода нового пароля, через ссылку из письма скинутого на e-mail? | |
|
|
|