Все хорошо хранить пароль в общую переменную класса?


Я делаю небольшую систему входа в 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.
}

Если я использовать шифрование, моя система будет очень медленно с большим количеством пользователей, входя в то же время?

Author: bfavaretto, 2014-02-02

4 answers

Я вопрос (на английском) о том, как лечить пароли engessadas в коде. Ответ, который я получил, это да рекомендуется использовать какой-то хэш - (солт - ) этих паролей.

Смысл этого заключается в следующем: кто-то может получить доступ к его исходный код, и в этом случае пароль не будет выставлен, только хеш. И консультацию они дали мне, было сохранить хэш пароля в отдельном файле, таким образом, что исходный код не должен быть изменен на нескольких объектах приложения.

 3
Author: bfavaretto, 2017-05-23 12:37:29

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

 1
Author: hugomg, 2017-05-23 12:37:23

В системе, логин, пароли должны быть сохранены (в базе данных, например) после того, как они были 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 является небольшой, как и в случае с паролями. Кроме того, безопасность всегда приходит перед выступлением. Производительность может быть улучшена после, альпинизм вертикально или горизонтально.

 0
Author: dcastro, 2014-02-02 22:24:16

Как вы обрабатывает пароли в коде не имеет значения. Важно то, как хранятся, например, в базе данных.

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

То, что вы должны беспокоиться о хэши, только когда будет хранить в базе данных.

 0
Author: mlemos, 2014-02-03 00:09:18