#php #jquery #md5
#php #jquery #md5
Вопрос:
Когда я попытался обновить / изменить пароль, он говорит, что мой текущий пароль неверен,
Я использую md5 для шифрования пароля, но я не знаю, как обновить зашифрованный пароль с помощью jQuery и Ajax.
Это код jQuery, который я использую:
jQuery("#change_password").submit(function (e) {
e.preventDefault();
var password = jQuery('#password').val();
var current_password = jQuery('#current_password').val();
var new_password = jQuery('#new_password').val();
var retype_password = jQuery('#retype_password').val();
if (password != current_password) {
$.jGrowl("Password does not match with your current password ", {
header: 'Change Password Failed'
});
} else if (new_password != retype_password) {
$.jGrowl("Password does not match with your new password ", {
header: 'Change Password Failed'
});
} else if ((password == current_password) amp;amp; (new_password == retype_password)) {
var formData = jQuery(this).serialize();
$.ajax({
type: "POST",
url: "update_password_mahasiswa.php",
data: formData,
success: function (html) {
$.jGrowl("Your password is successfully change", {
header: 'Change Password Success'
});
var delay = 2000;
setTimeout(function () {
window.location = 'dashboard_mahasiswa.php'
}, delay);
}
});
php-код для обновления пароля:
<?php
include('dbcon.php');
include('session.php');
$new_password = $_POST['new_password'];
$new_password = md5($new_password)
mysql_query("update mahasiswa set password = '$new_password' where mahasiswa_id = '$session_id'")or die(mysql_error());
?>
Комментарии:
1. Не используйте
md5()
для хэширования пароля. Это очень небезопасно. Вместо этого используйтеpassword_hash()
иpassword_verify()
PHP. Если вы используете версию PHP ниже 5.5 (на что я действительно надеюсь, что это не так), вы можете использовать библиотеку password_compat , чтобы получить ту же функциональность.2. Вы должны отправить пароль на серверную часть, где вы обрабатываете всю проверку пароля и хэширование.
3. не используйте
mysql_
-функции. они были устаревшими годами и удалены в php7. используйте mysql или pdo и параметризованные инструкции — прямо сейчас ваш код преступно уязвим для атак с использованием SQL-инъекций! это означает, что рано или поздно ваш сервис передаст конфиденциальные данные хакерам.
Ответ №1:
Попробуйте использовать следующие функции при выполнении хэширования ваших паролей:
password_hash()
password_verify()
password_needs_rehash()
password_get_info()
Это довольно удобно, если вы хотите сделать это стандартным способом. Вот статья об этом.
Что касается обновления вашего нового пароля, это такой же запрос на обновление, как и любой стандартный.
ОБНОВИТЕ имя_таблицы, УСТАНОВИТЕ column1=значение, column2=значение2,… ГДЕ some_column=some_value
Здесь больше информации.
Комментарии:
1. Использование
password_*
функций, конечно, будет означать, что все пароли должны храниться с помощью этих функций, и проверка происходит немного иначе, чем проверка поmd5()
хэшу. Таким образом, OP должен отказаться отmd5()
«шифрования», но также должен изменить свои модули регистрации и входа в систему для использованияpassword_*
функций.
Ответ №2:
Я бы рекомендовал вам использовать mysqli_query()
с подготовленными инструкциями. Чтобы избежать внедрения SQL, вы должны использовать подготовленные инструкции.
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
/* Prepared statement, stage 1: prepare */
$stmt = $mysqli->prepare("update mahasiswa set password = ? where mahasiswa_id = ?");
$new_password = password_hash($_POST['new_password']);
$stmt->bind_param("si", $new_password, $session_id);
$stmt->execute();
if($stmt->affected_rows === 0) exit('No rows updated');
$stmt->close();
Простой пример, в котором используется mysqli_query()
вместо mysql_query()
.
//$con must contain your database connection
//eg: $con = mysqli_connect("localhost","my_user","my_password","my_db");
$new_password = password_hash($_POST['new_password']);
$my_query = 'update mahasiswa set password = '.$new_password.' where mahasiswa_id = '.$session_id;
if(mysqli_query($con,$my_query)){
//database updated succesfully
} else {
//failure
}
Если вы работаете с mysql_query()
, то
// if your db connection is valid then
if(mysql_query($my_query)){
//database updated succesfully
} else {
//failure
}
Комментарии:
1. Использование
mysqli_
без подготовленной инструкции не намного лучше, чем использованиеmysql_
. Вам также необходимо обновить соединение при переключении API (что необходимо, просто используйте подготовленные инструкции). Кроме того, необходимо обновить уже сохраненные пароли, модули входа / регистрации также должны быть обновлены, если вы переходите наpassword_*
(что вам и следует!). Это необязательно простая замена.2. в настоящее время я работаю над mysqli, я хочу использовать md5 только для начала, но даже для этого я не могу изменить пароль с помощью jQuery
3. Убедитесь, что эти переменные (password, current_password, new_password, retype_password ) содержат точное значение. Не используйте md5, потому что это позже сломает вашу систему. Создайте систему seccur.