2015-08-31 3 views
0

Я использую этот учебник http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL для обеспечения доступа к моей веб-странице, и я хотел бы изменить его с помощью функции сброса пароля. . К сожалению, мой пароль сброса аддон магазин что-то, что делает счет не в состоянии войти вФорма входа/пароль

Этот код выполняет регистрацию пользователя и работает как шарм

$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true)); 

    // Create salted password 
    $password = hash('sha512', $password . $random_salt); 

    // Insert the new user into the database 
    if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) { 
     $insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
     // Execute the prepared query. 
     if (! $insert_stmt->execute()) { 
      header('Location: ../error.php?err=Registration failure: INSERT'); 
     } 
    } 
    header('Location: ./register_success.php'); 

Войти Обработка:

// hash the password with the unique salt. 
    $password = hash('sha512', $password . $salt); 

    if ($stmt->num_rows == 1) { 
     // If the user exists we check if the account is locked 
     // from too many login attempts 

     if (checkbrute($user_id, $mysqli) == true) { 
      // Account is locked 
      // Send an email to user saying their account is locked 
      return false; 
     } else { 
      // Check if the password in the database matches 
      // the password the user submitted. 
      if ($db_password == $password) { 

также работает хорошо. (Не моя работа :)) и теперь моя часть - случайная строка генератор с последующим хэшированием

$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
$charactersLength = strlen($characters); 
$randomString = ''; 
for ($i = 0; $i < 8; $i++) { 
    $randomString .= $characters[rand(0, $charactersLength - 1)]; 
} 

$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true)); 

    // Create salted password 
$password = hash('sha512', $randomString . $random_salt); 

      if ($insert_stmt = $mysqli->prepare("UPDATE members SET password = ?, salt=? WHERE username= ?")){ 
     $insert_stmt->bind_param('sss', $password, $random_salt, $username); 



$insert_stmt->execute(); 
             $insert_stmt->close(); 
    } 

сброса скрипта успешно модифицировать БД для пользователя, магазин правильной соли и правильного хэшированного пароля. Испытано показывает случайный текст и соль на экране и чем сочетается здесь http://www.convertstring.com/cs/Hash/SHA512

Любые советы, как отслеживать процесс хеширования или советы, как исправить это будет оценено.

У меня есть подозрение, что там могут быть некоторые проблемы с JS, который хэш пароля на стороне клиента

function formhash(form, password) { 
    // Create a new element input, this will be our hashed password field. 
    var p = document.createElement("input"); 

    // Add the new element to our form. 
    form.appendChild(p); 
    p.name = "p"; 
    p.type = "hidden"; 
    p.value = hex_sha512(password.value); 

    // Make sure the plaintext password doesn't get sent. 
    password.value = ""; 

    // Finally submit the form. 
    form.submit(); 
} 

Большое спасибо

+1

Вы действительно должны использовать [встроенные функции] РНР (http://jayblanchard.net/proper_password_hashing_with_PHP .html) для защиты паролей. Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

+3

исправить что? вы не сказали нам, в чем проблема. –

+0

... К сожалению, мой пароль для восстановления пароля добавляет то, что делает учетную запись неспособной войти в систему. – FrantisekNebojsa

ответ

0

обратного проектирования от вашей обработки formhash() Вход будет предположить, что вы должны не хэш $randomString, а скорее его версия sha512. Так что в вашем Восстановление пароля аддон вместо этой строки:

$password = hash('sha512', $randomString . $random_salt); 

Используйте эти два:

$password = hash('sha512', $randomString); 
$password = hash('sha512', $password . $random_salt); 
+0

Большое спасибо. MAGIC! :) – FrantisekNebojsa

Смежные вопросы