1
  • ユーザー ID とパスワード (暗号化された phpass) をデータベースに挿入しました
  • ユーザーがログインすると、システムは一致するユーザー ID とパスワードを比較します。
  • しかし、入力パスワードをハッシュして保存されたパスワードと入力パスワードを比較しているため、常に「間違ったパスワード」が返されます

私のコードは次のようになります。私は何を間違っていますか?

if(isset($_POST["btn_submitlogin"])){          
  $userpass1 = "admin1234";
  $this->load->library('phpass');
  $this->load->database();
  $hashed1 = $this->phpass->hash($userpass1);  

  $userpass2 = "admin1234"; // For example, I load the DB password here
  $this->load->database();
  $hashed2 = $this->phpass->hash($userpass2);

  if ($this->phpass->check($hashed1, $hashed2))
    echo 'logged in';
  else
    echo 'wrong password';
}
4

1 に答える 1

3

データベースに保存されたパスワードがすでにハッシュ化されている場合 (当然のことながら、ユーザー入力から取得したパスワードをハッシュ化し、それをデータベース内の既にハッシュ化された値と比較するだけで済みます。

phpass ライブラリには、そのメソッドを適切に使用する方法 (および SQL インジェクションなどの一般的なエクスプロイトを防ぐ方法) に関するチュートリアルを提供する、参照できるマニュアルがあります。

CheckPassword($password, $hash)マニュアルから、ブール値を返すというメソッドがあることがわかります。

ユーザー入力から元のパスワードを最初の引数として渡し、データベースからのハッシュ値を 2 番目の引数として渡すという考え方です。パスワードが一致する場合は true を返し (phpass は内部でハッシュとチェックを行います)、一致しない場合は false を返します。

例えば

$pass = $_POST['password']; // Your user input.

// .. Check the existence of your user in the DB, and fetch the hashed password (as $hash) if they exist.

if($phpass->CheckPassword($pass, $hash)) {

    // Authenticated!

} else {

    /// Incorrect password.

}
于 2014-01-30T14:16:32.573 に答える