mysqli查询检查输入的旧密码是否与数据库

时间:2017-04-05 01:45:01

标签: php mysqli

检查旧密码是否与数据库中的密码相匹配的正确查询是什么?

我这样做

  $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

我应该发布完整的代码吗?

1 个答案:

答案 0 :(得分:0)

答案:以上都不是。

md5sha更差,您也不应该使用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密码功能,因为它们质量很高,并且会随着时间的推移而改进并保持最新状态。如果您可以找到更好的机制,那就是例外情况,但这适用于专家。