Я использую этот учебник 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();
}
Большое спасибо
Вы действительно должны использовать [встроенные функции] РНР (http://jayblanchard.net/proper_password_hashing_with_PHP .html) для защиты паролей. Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –
исправить что? вы не сказали нам, в чем проблема. –
... К сожалению, мой пароль для восстановления пароля добавляет то, что делает учетную запись неспособной войти в систему. – FrantisekNebojsa