Этот код:
UPDATE user SET password=PASSWORD('newpassword') WHERE user ='root';
Скомпилирует (из-за отсутствия лучшего слова) , но очень небезопасный код:
Вот что говорится в руководстве MySQLо нем:
Примечание
Функция PASSWORD () используется системой аутентификации в MySQL Server;Вы должны не использовать его в своих собственных приложениях.Для этого рассмотрим MD5 () или SHA1 ().Также см. RFC 2195, раздел 2 (Механизм проверки подлинности с ответом на запрос (CRAM)), для получения дополнительной информации о безопасной обработке паролей и аутентификации в ваших приложениях.
Если вы настаиваете на хранении паролей в вашей базе данных,вы всегда должны солить их и использовать безопасный хеш.
MD5 и SHA1 больше не безопасны.В 2005 году (!) Брюс Шейер, ведущий эксперт по этой теме, сказал: "It's time for us all to migrate away from SHA-1."
Я предлагаю использовать SHA2 с длиной хэша 512 бит.
$user = mysql_real_escape_string($_POST['user']);
$password1 = mysql_real_escape_string($_POST['password1']);
$password2 = mysql_real_escape_string($_POST['password2']);
$oldpassword = mysql_real_escape_string($_POST['oldpassword']);
if not(empty($password1) and ($password1 == $password2) {
$update = "UPDATE user
SET passhash = SHA2(CONCAT(id,'$password1'),512)
WHERE user = '$user' AND passhash = SHA2(CONCAT(id,'$oldpassword'),512)";
Это гарантирует, что пользователь может изменять пароль только тогда, когда он знает старый пароль.
Соль должна храниться в той же строке, что и пароль, но не должна быть секретной.
Просто убедитесь, что вы добавили ее к паролю.
Проверка пароля работает следующим образом:
SELECT * FROM user
WHERE username = 'root'
AND passhash = SHA2(CONCAT(id,'passwordexample'),512)