【PHP8.x】password_needs_rehash関数の使い方
password_needs_rehash関数は、既存のパスワードハッシュが現在の推奨設定に基づいて再生成する必要があるかどうかを判定する関数です。この関数は、主にアプリケーションのセキュリティを継続的に維持・向上させる目的で使用されます。
パスワードのハッシュ化に用いるアルゴリズムやその強度(コストパラメータ)は、時間の経過とともに新しい脅威に対応するために見直されることがあります。例えば、ユーザーがシステムに登録した当時のハッシュ設定が、現在では古くなっていたり、より高いセキュリティレベルが必要になったりする場合があります。
password_needs_rehash
関数は、引数としてデータベースに保存されている既存のハッシュ、現在推奨されるハッシュアルゴリズム(例: PASSWORD_BCRYPT
)、およびそのオプション(例: コスト値)を受け取ります。そして、既存のハッシュがこれらの現在の推奨基準を満たしていない場合にtrue
を返します。
通常、ユーザーがログインする際にpassword_verify
関数でパスワードの正当性を確認した後、このpassword_needs_rehash
関数を使って、そのハッシュが最新のセキュリティ要件を満たしているかを確認します。もしtrue
が返された場合、ユーザーが入力した平文のパスワードを最新の設定で再度ハッシュ化し、データベースに保存し直すことで、ユーザーにパスワードの変更を求めることなく、システムのセキュリティレベルを向上させることができます。これにより、透過的にセキュリティ対策を施すことが可能となります。
基本的な使い方
構文(syntax)
<?php
$hash = '$2y$10$abcdefghijklmnopqrstuvwxyzaBCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.';
$algo = PASSWORD_DEFAULT;
$options = ['cost' => 12];
$needsRehash = password_needs_rehash($hash, $algo, $options);
?>
引数(parameters)
string $hash, int $algo, array $options = []
- string $hash: 比較対象となるパスワードハッシュ文字列
- int $algo: 使用するハッシュアルゴリズム定数 (例: PASSWORD_DEFAULT)
- array $options = []: ハッシュアルゴリズムのオプションを指定する連想配列
戻り値(return)
bool
この関数は、指定されたパスワードハッシュが現在の推奨アルゴリズムまたはオプションで再ハッシュする必要があるかどうかを示します。trueを返す場合は再ハッシュが必要であり、falseを返す場合は不要です。