Все хорошо хранить пароль в общую переменную класса?
Я делаю небольшую систему входа в PHP с помощью новых функций password_hash
и password_verify
. Это хорошая практика, чтобы хранить пароль в переменной public в классе? Если это не так, рекомендуется использовать некоторые другие шифрование быстро, как md5, только чтобы не оставлять пароль?
, например:
function User($name,$pass){
$this->username = $name;
$this->password = md5($pass); //Armazenar em md5 para nao armazenar a senha sem encriptação.
}
:
function User($name,$pass){
$this->username = $name;
$this->password = $pass; //Não tem problema armazenar assim.
}
Если я использовать шифрование, моя система будет очень медленно с большим количеством пользователей, входя в то же время?
4 answers
Я вопрос (на английском) о том, как лечить пароли engessadas в коде. Ответ, который я получил, это да рекомендуется использовать какой-то хэш - (солт - ) этих паролей.
Смысл этого заключается в следующем: кто-то может получить доступ к его исходный код, и в этом случае пароль не будет выставлен, только хеш. И консультацию они дали мне, было сохранить хэш пароля в отдельном файле, таким образом, что исходный код не должен быть изменен на нескольких объектах приложения.
Public и private ориентации объекта связана с организацией и модульность вашего кода и - фактор importaque nte по вопросу безопасности. Public переменная не будет видна вне программы и частной переменной, делая идиотизм все еще будет проблема безопасности.
Что Касается хеширования, не используйте md5! Md5-это хэш, который был изготовлен, чтобы быть очень быстрым запуском, и это плохо, когда вы имеете дело с паролями. Если хакер получить доступ к копии базы данных с hashs паролей, он сможет "ударить" пароли своих пользователей гораздо быстрее, чем он мог бы сделать через веб-интерфейс нормальный. Чем быстрее будет ваша хэш-функция, пароли хакер может удар в минуту и меньше времени это займет, чтобы это узнать пароль самом деле.
Для хранения паролей, то лучше использовать хэш lerdo, желательно, в которых вы можете провести настроить медлительность, с параметр оставить хэш наиболее lerdo можно без негативного воздействия на ее производительность. Некоторые общие примеры этих hashs специальных паролей bcrypt, PBKDF2 и с. Также настоятельно рекомендую использовать какой-либо готовых библиотек, которые реализуют эти протоколы пароль, так как это очень легко реализовать что-то небезопасно, если вы сделаете на руке. В случае, если PHP (p начиная с версии 5.5), вы можете использовать функции password_hash
и password_verify
, которые реализуют протокол пароль, с помощью bcrypt.
Https://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing-passwords-in-php
В системе, логин, пароли должны быть сохранены (в базе данных, например) после того, как они были hashadas (из-за отсутствия лучшего слова) солт - генерируется случайным образом, для этого пользователя (как указано на @bfavaretto). Так, в BD, каждый пользователь должен иметь по крайней мере 3 элементов, хранящихся: username
, hashed password
и salt
.
Таким образом, что пароль пользователя переходит на сервере, необходимо выполнить следующие действия (в псевдокоде):
login(username, password) {
//obter informacao do user
User user = bd.getUser(username);
//obter o salt deste user
string salt = user.salt;
//"hashar" a password introduzida pelo utilizador
//e verificar se corresponde a' password na BD
if(Hash(password, salt) == user.hashed_password) {
//login com sucesso
}
}
Тебя Не помните, что, когда новый пользователь регистрируется, необходимо сгенерировать солт - случайным:
registar_user(username, password) {
string salt = random(); //gerar salt
string hashed_password = Hash(password, salt); //"hashar" password com o salt gerado
db.Insert(username, hashed_password, salt);
}
Примечание: Внимание, не путать хеширование - шифрования. MD5 это алгоритм хеширования, а не шифрования. Кроме того, уже была доказана в 1995 году, а в 2004 году, что алгоритм MD5 имеет серьезные недостатки и не должно быть использовано. Вместо этого он использует SHA256 или SHA512.
Алгоритмы шифрования используются в других случаях, для предотвращения перехваченные сообщения могут быть декодированы или изменены, например. Существует симметричных алгоритмов (AES) или асимметричные (RSA).
Если я использовать шифрование, моя система будет очень медленно с большим количеством пользователей, входя в то же время?
Алгоритмы хеширования очень быстро, особенно, если input является небольшой, как и в случае с паролями. Кроме того, безопасность всегда приходит перед выступлением. Производительность может быть улучшена после, альпинизм вертикально или горизонтально.
Как вы обрабатывает пароли в коде не имеет значения. Важно то, как хранятся, например, в базе данных.
В вашем коде, вы не сохраняет в базе данных, но только в переменной класса. Поэтому не имеет смысла использовать любой функции хеширования или шифрования, так как это не прибавит никакой безопасности вашего сценария.
То, что вы должны беспокоиться о хэши, только когда будет хранить в базе данных.