関数の概要
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 と組み合わせて使用するのが基本で、パスワード認証の標準的な実装手法として推奨されています。
