mysqli — безопасно хранит пароль в MySQL, используя PHP и проверяя его впоследствии

Я читал несколько постов и пробовал разные методы для хранения пароля в MySQL. Я решил использовать crypt а также salt и я наконец-то смог вставить его в свою базу данных. Используемый код следующий:

    $cost = 10;
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
$salt = sprintf("$2a$%02d$", $cost) . $salt;
$hash = crypt($password, $salt);
$query = "INSERT INTO users_registered(name , password) VALUES('$name', '$hash')";
mysqli_query($con, $query);

Основная проблема, с которой я боролся в течение нескольких часов, заключается в том, как проверить, верен ли введенный мной пароль. Я уверен, что я делаю что-то не так, но я совершенно новичок в этой области безопасности, и все сообщения, которые я проверял, не работали для меня. Это код, который я использую для проверки:

$name = mysqli_real_escape_string( $con, $_POST['name'] );
$password = mysqli_real_escape_string( $con,$_POST["password"]);

$query = "SELECT * FROM users_registered where name='$name'";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_assoc($result);
$hash=$row['password'];
if ($hash->hash==crypt($password, $hash->hash)) {
echo "YEEEESSS";
}
else {
echo "What I'm doing wrooooong!";}

Проблема исходит от if, но я не уверен, что я должен поставить: S
Любая помощь будет оценена 🙂

1

Решение

Как уже упоминалось в комментариях, лучшим способом является использование password_hash() Вместо того, чтобы использовать:

$cost = 10;
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
$salt = sprintf("$2a$%02d$", $cost) . $salt;
$hash = crypt($password, $salt);

В моем случае моя версия php была ниже 5.5, и я не смог вставить библиотеку совместим с более низкими версиями, даже если это самый безопасный способ !!

Чтобы проверить, был ли мой сохраненный пароль таким же, какой был введен пользователем через $_POST, if должен быть изменен следующим образом:

if (crypt($password, $hash) == $hash) {
...

и это сделало трюк !! Примите во внимание, что я только начинающий, и этот метод может быть небезопасным 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector