[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как нужно хранить пароли (не в базе данных)?
goodguy
Всем привет,
собственно, сабж.

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

Все бы хорошо, но мне нужно немного другое. При той схеме, что у меня есть сейчас, после выхода с сайта, пользователю необходимо опять вручную вводить свой логин и пароль, что не всегда удобно и хорошо. На многих сайтах, даже после выхода из системы, пароль и логин сохраняются в менеджере паролей браузера, и при нажатии Ctrl + Enter (в большинстве случаев), автоматически вводятся.

Как можно реализовать такой механизм?

п.с. В фаерфоксе они запоминаются без каких-либо телодвижений со стороны моей "cms" biggrin.gif
но вот в опере и других браузерах этого не происходит.



Спустя 1 час, 31 минута, 22 секунды (18.07.2012 - 07:49) vagrand написал(а):
Цитата
На многих сайтах, даже после выхода из системы, пароль и логин сохраняются в менеджере паролей браузера, и при нажатии Ctrl + Enter (в большинстве случаев), автоматически вводятся.


Это функционал самого браузера, не надо поутать его с функционалом php.

Цитата
Пользователь вводит логин и пароль и жмет кнопку войти, тут же назначается куки с логином и хэшем пароля.


Очень и очень плохо хранить логин и пароль в куках, пусть даже и в виде хеша.

Спустя 36 минут, 9 секунд (18.07.2012 - 08:25) goodguy написал(а):
Цитата
Это функционал самого браузера, не надо поутать его с функционалом php.

Почему тогда на других сайтах запоминается, а на моем нет? Даже не всплывает запрос "сохранить данные или нет".

Может из-за того, что у меня данные формы отправляются не кнопкой, а через джаваскрипт?
Кнопка логина выглядит так:

<div class='GreyButton' id='LoginButton'>
<a
href='javascript:document.login_form.submit();' class='grey-button pcb'>
<span>
$login</span>
</a>
</div>

Цитата
Очень и очень плохо хранить логин и пароль в куках, пусть даже и в виде хеша.

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

Спустя 6 минут, 35 секунд (18.07.2012 - 08:32) Игорь_Vasinsky написал(а):
Цитата
Если это не хранить в куках, то на кой они тогда вообще нужны? (именно применительно к запоминанию пользователя)

в куках не хранят пароли, если есть галочка "запомнить" - то просто создаётся произвольная кука (например с id юзера) для нужного домена, по наличии которой, потом определяется - выводить форму авторизации или сразу авторизировать.

хотя можно рискнуть у и хранить хэш пароля (как и в БД) и логин, но это лишние телодвижения и есть риск что куки сопрут и начнут подбирать по словарю.

Спустя 6 минут, 41 секунда (18.07.2012 - 08:38) goodguy написал(а):
Цитата
потом определяется - выводить форму авторизации или сразу авторизировать.

Что-то я недопонимаю. А на основании чего будет авторизация происходить? Ну сохраню я id пользователя для домена, но потом же любой ламер сможет с таким же успехом стырить у кого-то куку, посмотреть какой там id, вставить его в свою куку и вуаля! Авторизоваться под чужим аккаунтом. Какой в этом смысл?

Цитата
начнут подбирать по словарю.

А разве не для этого существует такое понятие как "соль"? Что даст словарь, если у меня хэш составляется с применением мною придуманной "соли"?

п.с. основной вопрос по прежнему в силе

Спустя 17 минут, 20 секунд (18.07.2012 - 08:56) Игорь_Vasinsky написал(а):
если куки воруют у юзера - это головники юзера.

Цитата
А разве не для этого существует такое понятие как "соль"? Что даст словарь, если у меня хэш составляется с применением мною придуманной "соли"?


ну раз знаешь про соль - молодец.

Спустя 54 минуты, 54 секунды (18.07.2012 - 09:51) goodguy написал(а):
ок, с этим разобрались, но как быть с запоминанием пароля и логина браузером?
Джаваскрипт не есть гуд при отправке данных формы?

Спустя 16 минут, 52 секунды (18.07.2012 - 10:08) vagrand написал(а):
в куке надо хранить ид пользователя и авторизационный хеш, который будит уникальным для каждой авторизации пользователя. Так же очень хорошо добавить в него дату до которой он валиден

Спустя 12 минут, 29 секунд (18.07.2012 - 10:20) Quieteroks написал(а):
goodguy
vagrand сказал единственно верное решение.
В бьазе кроме хеша пароля и логина хранишь некий хеш для авторизации.
Хеш авторизации отправляется пользователю в куки.

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

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

Спустя 30 минут, 17 секунд (18.07.2012 - 10:50) goodguy написал(а):
Цитата
А в скрипте проверяешь, имеется ли у пользователя куки с нуным тебе хешем и ищешь в базе по эту хешу.

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

С браузером разобрался. Изначально когда делал похоже нажал "никогда не сохранять пароли". Поменял домен для проверки, и все стало ок.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.