2016-11-22 8 views
-1

Сегодня я узнал о безопасном хэшировании с солью в школе и начал использовать password_hash. Это потрясающе, и кажется очень надежным, до этого я использовал материал md5. Но теперь я что-то упускаю.password_hash и запоминание паролей для входа

В моей базе данных я записал сеансы входа в систему и те, кто решил «запомнить» свое имя пользователя и пароль. Затем, основываясь на IP-адресе, и имеет ли последняя запись «да» или «нет» для столбца «помнить» в базе данных, я бы расшифровал md5 пароля и использовал его как «значение» для ввода пароля. Но дешифрование (насколько мне известно) невозможно для password_hash, вы можете проверить это, не так ли? Итак, как бы вы могли реализовать опцию «запомнить пароль» с паролем_ пароль?

+2

Дешифрование 'md5'« технически »невозможно ... так что без вашего кода мы не можем вам помочь. – cmorrissey

+0

Вы храните 'ключ' в' cookie', и вы храните тот же 'key' с именем пользователя' id' в базе данных. Затем, если они загружают вашу страницу, вы можете проверить, есть ли у них соответствующий код. Таким образом, вы можете проверить, находится ли тот же браузер/устройство на вашем сайте. – Nytrix

ответ

0

В общем, функция, которую вы ищете, password_verify(): http://php.net/manual/en/function.password-verify.php

Но просто установить переменный сеанс или что-то, чтобы помнить пользователь, нет необходимости делать что-либо с расшифровкой паролей.

0

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

0

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

Как сторона не ip-адрес не очень хороший способ запомнить сеанс пользователя. На некоторых компьютерах, расположенных за NAT, может быть один и тот же IP-адрес на сервере. Вместо этого используйте cookie.

2

Только во избежание недоразумений функциональное свойство remember-me не имеет никакого отношения к паролю пользователя, это было бы серьезным нарушением безопасности, если вы сохранили пароль на стороне клиента.

Обычно после успешного входа в систему, приложение:

  1. генерирует случайный маркер, который зависимы друг от друга по имени пользователя или пароля.
  2. Этот токен может быть установлен в cookie на стороне клиента.
  3. Хэш токена хранится в базе данных вместе с идентификатором пользователя.
  4. Если пользователь посещает сайт в следующий раз, вместо того, чтобы просить пароль, можно прочитать токен из файла cookie, хэш его снова и сравнить с уже сохраненным маркером.
  5. Если хеши совпадают, пользователю разрешен доступ к сайту без ввода имени пользователя и пароля.
+0

'Обычно после успешного входа в систему приложение генерирует случайный токен'. Вы имеете в виду только первый вход? или после того, как каждый логин будет генерировать новый токен? – RIKI

+0

@OTARIKI - Создайте новый токен всякий раз, когда пользователь вошел в систему и запросил куки-файл с помпом (это, конечно, должно быть необязательно). После того, как пользователь выйдет из системы, токен больше не будет действителен, поэтому в следующий раз вы создадите другой. Также может быть несколько токенов для нескольких устройств. – martinstoeckli

Смежные вопросы