2016-04-24 114 views
0

我对新的php感到困惑...php在更改密码之前验证密码

我写下面的代码,但是有些东西没有工作。

方案是验证数据库中的密码,如果密码正确,那么响应应该是确定的。如果没有,则停止搜索。

$currentPassword = preg_replace('/\s+/', '', $_POST['currentPassword']); 
    $newPassword = preg_replace('/\s+/', '', $_POST['newPassword']); 
    $ConfirmPassword = preg_replace('/\s+/', '', $_POST['ConfirmPassword']); 
    $oldpass = IrBuscarPassword($_SESSION['user']['username']); 

     $hash = password_hash($oldpass, PASSWORD_BCRYPT, ['cost' => 13]); 

     if (password_verify($currentPassword, $hash)) { 
      // password valid 
      $change = true; 
     } else { 
      $change = false; 
     } 

所以......这是我的代码现在...我不知道这是否是好办法... 请帮我这...

if(isset($_POST['currentPassword'])) 
    { 

    $currentPassword = $_POST['currentPassword']; 
    $newPassword = $_POST['newPassword']; 
    $ConfirmPassword = $_POST['ConfirmPassword']; 
    //$saltcode = IrBuscarSalt($_SESSION['user']['username']); 

    $oldpass = IrBuscarPassword($_SESSION['user']['username']); 
    $hash = password_hash($oldpass, PASSWORD_BCRYPT, ['cost' => 13]); 

     if (password_verify($oldpass, $hash)) { 
      // password valid 
      //echo $oldpass; 
      $change = true; 
     } else { echo "bad"; } 
    } 
+0

从数据库中提取用户。使用password_verify检查提供的“oldpass”(currentPassword),如果有效,则将新密码的散列保存到数据库。如果没有 - 显示错误。 – JimL

+0

虽然我会跳过代码的'preg_replace'部分,但您可能需要使用旧密码,因为存储的哈希是来自没有空格的密码。但是没有理由限制新哈希的熵 – JimL

+0

更改用户的输入密码是一个坏主意,因为它们输入的内容可能与存储为密码的内容不匹配。如果用户故意在密码的末尾放置空格以摒弃简单的暴力攻击,该怎么办? – GordonM

回答

0

在使用password_verify之前不要对旧密码进行哈希处理。验证完成并通过验证后,您可以对其进行哈希处理并继续。