関数の概要
PHPのpassword_verify関数は、ユーザーが入力したパスワードと、保存されているハッシュ化されたパスワードを比較するための関数です。この関数を使うことで、生のパスワードを直接比較せずに、安全に認証処理を行うことができます。
パラメータの説明
password:ユーザーが入力した生のパスワード(文字列)hash:password_hash関数などで生成されたハッシュ化パスワード(文字列)
戻り値
password_verifyは、入力されたパスワードがハッシュと一致する場合に true を返し、一致しない場合は false を返します。これにより、認証の成否を簡単に判断できます。
使用例
基本的な使い方
$hash = password_hash('example_password', PASSWORD_DEFAULT);
if (password_verify('example_password', $hash)) {
echo 'パスワードが正しいです。';
} else {
echo 'パスワードが正しくありません。';
}
この例では、まずパスワードをハッシュ化し、その後同じパスワードを検証しています。正しいパスワードなら「パスワードが正しいです。」と表示されます。
フォームからの入力を検証する例
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// データベースから取り出したハッシュ(例として固定文字列)
$stored_hash = '$2y$10$wH1dL7bRmB2k1Qg8bQmNqORkHHP9T0VJ.pxRN7cD24q0Xb15oR3ye';
$input_password = $_POST['password'];
if (password_verify($input_password, $stored_hash)) {
echo 'ログイン成功!';
} else {
echo 'ログイン失敗:パスワードが違います。';
}
}
投稿されたパスワードをデータベースから取得したハッシュと比較し、認証結果を判定する典型的な例です。
パスワード変更時に新しいハッシュを生成して検証する例
$current_hash = password_hash('old_password', PASSWORD_DEFAULT);
$old_password_input = 'old_password';
$new_password = 'new_secure_password';
if (password_verify($old_password_input, $current_hash)) {
// パスワードが正しいなら新しいハッシュを生成する
$new_hash = password_hash($new_password, PASSWORD_DEFAULT);
echo 'パスワードが変更されました。';
} else {
echo '現在のパスワードが間違っています。';
}
パスワードの変更処理において、現在のパスワードをまず検証し、正しければ新しいパスワードのハッシュを作成して保存する流れの例です。
関連する関数
password_hash– パスワードを安全にハッシュ化する関数password_needs_rehash– ハッシュの再生成が必要かを判定する関数password_get_info– ハッシュの情報を取得する関数
まとめ
password_verifyは、PHPで安全にパスワード認証を行うために必須の関数です。生のパスワードを直接比較するのではなく、ハッシュ化された値と比較するため、セキュリティを大きく向上させます。実務でユーザーログインやパスワード管理を実装する場合は、password_hashと合わせて必ず活用しましょう。
