【发布时间】:2019-06-08 08:05:21
【问题描述】:
在 php 站点上将旧的 md5 密码更新为 password_hash 时遇到问题 我能够将所有文件更新为 password_hash 我只是在会员下次登录时更新数据库中的旧密码
这里是原代码
$password = passhash($_POST["password"]);
if (!empty($_POST["username"]) && !empty($_POST["password"])) {
$res = SQL_Query_exec("SELECT id, password, secret, status, enabled FROM users WHERE username = " . sqlesc($_POST["username"]) . "");
$row = mysqli_fetch_assoc($res);
if ( ! $row || $row["password"] != $password )
$message = T_("LOGIN_INCORRECT");
elseif ($row["status"] == "pending")
$message = T_("ACCOUNT_PENDING");
elseif ($row["enabled"] == "no")
$message = T_("ACCOUNT_DISABLED");
} else
$message = T_("NO_EMPTY_FIELDS");
这里有密码哈希
$password = $_POST["password"];
if (!empty($_POST["username"]) && !empty($_POST["password"])) {
$res = SQL_Query_exec("SELECT id, password, secret, status, enabled FROM users WHERE username = " . sqlesc($_POST["username"]) . "");
$row = mysqli_fetch_assoc($res);
if ( !$row || !password_verify($password,$row["password"]))
$message = T_("LOGIN_INCORRECT");
elseif ($row["status"] == "pending")
$message = T_("ACCOUNT_PENDING");
elseif ($row["enabled"] == "no")
$message = T_("ACCOUNT_DISABLED");
} else
$message = T_("NO_EMPTY_FIELDS");
我认为它应该是这样的,但似乎无法在验证行之前让它工作
if (strlen($password) > 40)
{
// Password already converted, verify using password_verify
} else {
// User still using the old MD5, update it!
if ($password = passhash($_POST["password"]))
{
// update to password_hash
SQL_Query_exec("UPDATE users SET password WHERE username = " .
sqlesc($_POST["username"]) . "");
}
}
【问题讨论】:
-
您的查询
UPDATE users SET password WHERE username = ....实际上并没有更新任何内容。