Мне нужно часто использовать пароль в сеансе. Я шифрую свои пользовательские данные с помощью ключа, который шифруется паролем. Поэтому есть мой вопрос. Безопасно ли хранить пароли открытого текста в сеансе php (а не в файле cookie, а не на стороне клиента)? Есть ли способ лучше? Или я должен просто спрашивать у моего пользователя каждый раз за пароль?
Я шифрую закрытый ключ rsa с помощью пароля пользователя, используя phpseclib. Каждый раз, когда мне нужен доступ к ключу, мне нужен пароль. У меня есть два варианта: либо я сохраняю пароль или ключ, который, как я думаю, не очень хорош. Я не могу использовать passwordhash для шифрования, потому что хеш хранится в «plaintext» в базе данных …
Сохранение незашифрованных паролей в любом месте в любом качестве, как правило, является плохой идеей. Сеансы безопасны как таковые, но только настолько безопасны, как остальная часть вашей серверной среды. Администраторы или другие пользователи, как законные, так и нечестные, могут иметь доступ к хранящимся на нем данным. Вы никогда не захотите обращаться с секретами своих клиентов, если сможете избежать этого; это также означает, что вы хотите избежать просмотра пароля пользователя ни при каких обстоятельствах, и вы должны создать свой код таким образом, чтобы пароль открытого текста был как можно короче, насколько это технически возможно.
Если вам нужно использовать пароль для чего-то во время сеанса, вы должны архивировать приложение, чтобы он никогда не использовал пароль открытого текста, но используйте функцию деривации ключа для получения ключа из пароля, который вы затем используете для ваших чувствительных задач. Таким образом, гораздо меньше шансов выставить пароль пользователя. Помните, что единственная безопасность, которой обладает пользователь, – это секретность его пароля, который должен знать только он.
Если это произойдет, и когда хакеры получат доступ к вашему серверу, они будут видеть пароли в виде обычного текста. Никогда не храните текстовые пароли (везде)
Об общем вопросе. Вы запрашиваете у пользователя один раз пароль и проверяете зашифрованный пароль на зашифрованный пароль, например, в базе данных. Если они совпадают, вы начинаете новый сеанс. Когда пользователь попытается получить доступ к вашему сайту, вы проверите, существует ли для этого пользователя сеанс. Поэтому нет необходимости хранить пароль в сеансе.
Никогда не храните какие-либо конфиденциальные данные в любом месте, кроме базы данных, вы, как правило, должны избегать непосредственного использования семейств MD5
и SHA
.
Если вы внедряете систему аутентификации, затем сравниваете информацию клиента (обычно имя пользователя и пароль), затем создавайте специальный токен, а затем сохраняете его в сеансе или в cookie.
if ($username == 'someuser' AND $password == 'somepassword_hash'){ $token = md5(uniqid()); // database query with along with user_id and token $_SESSION['_token'] = $token; }
functon varifyToken($token){ // database query here // SELECT user_id FROM sessions WHERE token = 'token_here' }
Никогда не храните пароли в открытом виде . Помимо этого: да, сеансы в безопасности. Сеансы хранятся на сервере. Сами данные сеанса никогда не отправляются в браузер.
Является ли это разумным или даже необходимо хранить пароль в сеансе, возможно, нет. Возможно, по причинам кэширования, но даже тогда это непрозрачно.