Я пытаюсь выяснить, как лучше всего войти на мой сайт после того, как я проверил правильность входа.
Я пытался взглянуть на «Keep Me Logged In» — лучший подход где самый голосующий ответ сказал, что я должен сгенерировать токен и затем сохранить этот токен в базе данных! Конечно, это совершенно небезопасно, потому что все, что нужно, — это взлом базы данных и редактирование cookie, чтобы попасть в чужую учетную запись?
Может ли кто-нибудь предоставить мне самый современный на данный момент безопасный способ сделать это? Благодарю.
Недавно мы опубликовали блог о безопасная аутентификация с долговременным постоянством (a.k.a «Запомнить меня»), но самая большая разница между этим сообщением в блоге и Ответ ircmaxell на «Keep Me Logged In» — лучший подход это разделение поиска (который не постоянное время) и подтверждение (постоянное время).
В стратегии, описанной в нашем блоге, вы не храните токены в базе данных, вы храните хэш SHA-256 токена. Если злоумышленник утечет эти значения, он должен взломать SHA-256 хэши сильных случайных токенов. Им лучше просто запустить обратную оболочку, которая позволит им аутентифицироваться как любой пользователь (или продолжить захват всей машины с помощью локального эксплойта ядра).
Используйте bcrypt. конкретно password_verify()
, Не создавайте свои собственные соли.
Если вы хотите пройти лишнюю милю, учтите это bcrypt + AES библиотека для шифрования хэшей паролей (что особенно полезно, если у вас есть база данных и веб-сервер на отдельном оборудовании, поскольку компрометация базы данных не даст им ключ шифрования).
При входе в систему:
rememberme
печенье.rememberme
cookie, захватите идентификатор и выполните поиск в базе данных.hash_equals()
,Хранение сгенерированного токена в базе данных в виде открытого текста, безусловно, является риском, но обычно считается приемлемым. Один из способов смягчения состоит в том, чтобы потребовать от пользователя повторной аутентификации перед выполнением чувствительных операций. Например, Amazon, похоже, требует, чтобы я ввел свой пароль, прежде чем я изменю данные своей учетной записи, если только я недавно не ввел свой пароль.