password_verify

関数の概要

PHPの password_verify 関数は、ユーザーが入力したパスワードと、ハッシュされたパスワードを安全に比較するための関数です。パスワード認証の際に、平文のパスワードを直接比較せずに、ハッシュ化されたパスワードと照合することでセキュリティを高めます。

パラメータの説明

  • $password(string): 検証したいユーザーの平文パスワード。
  • $hash(string): データベースなどに保存されているパスワードのハッシュ値。

戻り値

password_verify は、パスワードが正しい場合は true、そうでない場合は false を返します。これにより、認証の成否を簡単に判定できます。

使用例

基本的な使い方

<?php
$inputPassword = 'user_input_password';
$storedHash = '$2y$10$e0NRXn6aGkZQJhrEbO8yJ.9tP3ph9GX6Dc0v4b1oGkZ4jheYaYjF2'; // 例: password_hash で生成されたハッシュ

if (password_verify($inputPassword, $storedHash)) {
    echo 'ログイン成功です。';
} else {
    echo 'パスワードが違います。';
}
?>

この例では、ユーザーが入力したパスワードを保存されているハッシュと照合し、一致すればログイン成功と表示します。

フォーム入力後のパスワード検証例

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $inputPassword = $_POST['password'];
    $storedHash = '$2y$10$VbBdEH39H9QvQO3kxT8a1OQ7UhMn7X8A54CpNmXdF0JUdKSaWrN2S';

    if (password_verify($inputPassword, $storedHash)) {
        echo '認証に成功しました。';
    } else {
        echo 'パスワードが正しくありません。';
    }
}
?>

フォームからPOSTされたパスワードを検証し、結果を出力します。

ユーザー登録時のパスワードハッシュと検証例

<?php
// 新規登録時にパスワードをハッシュ化
$plainPassword = 'my_secure_password';
$hash = password_hash($plainPassword, PASSWORD_DEFAULT);

// 後でログイン時に検証
$userInput = 'my_secure_password';
if (password_verify($userInput, $hash)) {
    echo 'パスワードが一致しました。';
} else {
    echo 'パスワードが異なります。';
}
?>

パスワードを保存時にハッシュ化し、後でそのハッシュを用いて検証しています。これが良くある認証の流れです。

関連する関数

  • password_hash : パスワードを安全にハッシュ化するための関数。
  • password_needs_rehash : 既存のハッシュが最新のアルゴリズムに合っているか確認し、必要なら再ハッシュするための関数。

まとめ

password_verify は、PHPで安全にパスワード検証を行うための重要な関数です。ハッシュ化されたパスワードとの比較を自動化し、平文パスワードを直接扱わないことでセキュリティを確保します。実務では password_hash と組み合わせて使用するのが基本で、パスワード認証の標準的な実装手法として推奨されています。