2016-04-24 8 views
0

私は新しいphpと混同しています...phpパスワードを変更する前に

私は以下のコードを書きましたが、何か動作していません。

シナリオは、DBのパスワードを確認することです。パスワードがOKの場合、応答はOKです。そうでない場合は、検索を停止します。

$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

DBからユーザーを取得します。パスワードが有効であれば、指定された「oldpass」(currentPassword)をpassword_verifyでチェックし、新しいパスワードのハッシュをデータベースに保存します。そうでない場合 - エラーを表示します。 – JimL

+0

私はコードの 'preg_replace'部分をスキップしますが、保存されたハッシュはスペースなしのパスワードからのものであるため、おそらくこれは古いパスワードに必要です。しかし、新しいハッシュのエントロピーを制限する理由はありません – JimL

+0

ユーザの入力パスワードを変更することは悪い考えです。なぜなら、入力した内容がパスワードとして保存されたものと一致しない可能性があるからです。ユーザーが意図的にパスワードの最後にスペースを入れて単純な無差別な攻撃を仕掛けた場合、どうなりますか? – GordonM

答えて

0

password_verifyを使用する前に古いパスワードをハッシュしないでください。検証して検証に合格したら、ハッシュして処理を進めることができます。

関連する問題