Вставка паролей в базу данных, какая разница с обычным текстовым полем? - PullRequest
2 голосов
/ 08 августа 2011

Я делаю регистрационную форму, мое единственное сомнение - как обращаться с паролями (как вставить их в базу данных MySQL). У меня нет ни малейшего представления о том, как это сделать, какой тип столбца должен быть Passwords, должен ли я их каким-то образом зашифровать и т. Д. Не могли бы вы привести базовый пример с объяснением, чтобы мне удалось это сделать?

Ответы [ 5 ]

2 голосов
/ 08 августа 2011

Вы не хотите хранить пароль в открытом виде. Вы даже не хотите знать, что такое пароль. Поэтому вы храните хеш пароля в вашей базе данных. Когда пользователь хочет войти в систему, вы хэшируете пароль, с которым он пытается войти, а затем сравниваете его с хэшем в базе данных. Любая серьезная система хранения паролей, кроме того, солит хеш, чтобы предотвратить атаки паролей по радужным таблицам (гугл, что). Поскольку это довольно сложная тема, и у вас, по-видимому, нет никакого опыта работы с ней, я рекомендую использовать phpass для хеширования и подсолки ваших паролей, не беспокоясь о деталях реализации. На сайте phpass также есть несколько хороших вводных статей на эту тему. Вот еще один , который делает его действительно простым.

Что касается базы данных, то это будет просто обычное VARCHAR поле, достаточно длинное для хранения хэша.

1 голос
/ 08 августа 2011

Прочитайте это: http://codahale.com/how-to-safely-store-a-password/

Затем сделайте это: http://www.openwall.com/phpass/

0 голосов
/ 08 августа 2011

Единственный способ надежно защитить пароль - использовать хеш-функцию Мура.Используйте bcrypt !

0 голосов
/ 08 августа 2011

Вы не должны хранить пароль, только хэш пароля.Тип базы данных следует выбирать после того, как вы выберете hasfunction.
Для md5 / sha512 это будет char (32), если вы сохраните шестнадцатеричное представление

Запрос выглядит примерно так:

"INSERT INTO users SET otherFields,pass_hash='".hashFunc($_POST['password']."';

, где hashFunc генерирует хеш ex

function hashFunc($pass){
    $salt='something';
    md5($salt . $pass);
}
0 голосов
/ 08 августа 2011

Один из способов сделать это - использовать md5.Вы конвертируете пароль в md5 и помещаете его в базу данных (шифрование md5 является односторонним), когда пользователь снова входит в систему, вы снова конвертируете заполненный пароль и проверяете, находится ли конвертированный пароль где-нибудь в вашей базе данных (в комбинацииобычно с именем пользователя).

РЕДАКТИРОВАТЬ

Вы можете сделать строку в строку md5 следующим образом:

$converted_pass = md5($unconverted_pass);

Однако вам понадобитсядобавить так называемый солт-ключ к паролю, прежде чем шифровать его с помощью md5.Это набор букв / цифр и т. Д. Если вы будете делать это каждый раз, у вас будет один и тот же результат, но это будет довольно безопасно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...