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