检查旧密码是否与数据库中的密码相匹配的正确查询是什么?
我这样做
$pass_lm = md5($_POST['password_lama']); //old password
$pass_baru = md5($_POST['password_baru']); // new password
//check if the field is filled or not
if(isset($_POST['password_lama']) && !empty($_POST['password_lama'])
AND isset($_POST['password_baru']) && !empty($_POST['password_baru'])){
//check if the old password matches
$cek=$con->query("SELECT password
FROM customer
WHERE username='$user' AND password='$pass_lm'")->num_rows;
if($cek > 0){
// check if the old pass matches, it will go back to previous page and shows message
// this is only to check if the query works as expected
$_SESSION['message'] = "Password anda lama anda tidak benar";
echo"<script> window.location.replace('home.php?module=editprofil') </script>";
}
}
使用该查询,即使我输入错误的密码,结果仍然为TRUE,因为密码与数据库中的匹配,它应为FALSE
我应该发布完整的代码吗?
答案 0 :(得分:0)
答案:以上都不是。
md5
比sha
更差,您也不应该使用sha
。
PHP具有生成密码哈希和测试密码的内置功能,这远远优于旧方法。
假设您的数据库内容正常,这里有一个简单的代码片段来生成和测试密码。
// Save Password
// Assume $password is the original password:
$hash=password_hash($password,PASSWORD_DEFAULT);
// Now save $hash in the database
测试密码
// Test Password
// Assume entered password is in $password
// Retrieve hash from database, using unique user name
$ok=password_verify($password,$hash)
请注意,使用此方法,您可以在测试之前从数据库中检索哈希(以及其他数据)。使用旧方法,您可以对候选人进行哈希处理,然后进行检索。
目前,PHP使用 bcrypt ,这是一种相对安全的算法,具有故意慢的额外好处。没有足够的速度来惹恼用户,但速度慢到足以让暴力攻击变得更加困难。
使用PASSWORD_DEFAULT
确保PHP将使用更新的&amp;更好的算法,当它们可用时。
始终使用内置的PHP密码功能,因为它们质量很高,并且会随着时间的推移而改进并保持最新状态。如果您可以找到更好的机制,那就是例外情况,但这适用于专家。