ウェブアプリケーションでユーザーのパスワードを安全に扱うためには、パスワードをハッシュ化して保存することが重要です。PHPでは、簡単にパスワードをハッシュ化するための組み込み関数が提供されています。本記事では、PHPで安全にパスワードをハッシュ化する方法と、ハッシュ化されたパスワードの検証方法について説明します。
password_hash() 関数とは?
password_hash() 関数は、指定したパスワードをハッシュ化し、セキュアな形式で保存するために使用されます。ハッシュ化とは、パスワードを元に戻せない形式に変換することで、データベースに保存されているパスワードが不正に取得されても悪用されにくくすることができます。
<?php
$password = 'example_password'; // ハッシュ化するパスワード
$hashed_password = password_hash($password, PASSWORD_DEFAULT); // ハッシュ化
echo $hashed_password; // ハッシュ化されたパスワードが表示されます
?>
password_hash() 関数は、デフォルトで PASSWORD_DEFAULT を使用してハッシュを生成します。このアルゴリズムは将来的に最適なものに自動的に更新されるため、常に最新のハッシュ方式を利用できる点が特徴です。
コストを指定してハッシュを生成する
password_hash() 関数は、ハッシュを生成する際に「コスト」を指定することができます。コストは、ハッシュを計算するためにかかる計算量を増やすもので、これを高く設定するとハッシュがよりセキュアになりますが、計算時間も長くなります。
<?php
$options = [
'cost' => 12, // コストを指定。デフォルトは10
];
$hashed_password = password_hash('example_password', PASSWORD_DEFAULT, $options);
echo $hashed_password;
?>
コストを増やすことで、攻撃者が総当たり攻撃を行う際にかかる時間を長くする効果があります。ただし、サーバーの性能に応じて適切なコストを選択する必要があります。
パスワードの検証方法
ユーザーがログイン時に入力したパスワードが、保存されているハッシュ化されたパスワードと一致するかを確認するためには、password_verify() 関数を使用します。この関数は、平文のパスワードとハッシュ化されたパスワードを比較し、一致すれば true を返します。
<?php
// ハッシュ化されたパスワード(例として前に生成したものを使用)
$hashed_password = '$2y$10$usesomesillystringforsalt$abcdefghijklmnopqrstuvwx';
// ユーザーが入力したパスワード
$input_password = 'example_password';
// パスワードを検証
if (password_verify($input_password, $hashed_password)) {
echo 'パスワードが一致しました。';
} else {
echo 'パスワードが一致しません。';
}
?>
password_verify() を使うことで、セキュアに保存されたパスワードを元に戻すことなく検証が可能です。これにより、セキュリティがさらに強化されます。
まとめ
パスワードを安全に管理するためには、必ずハッシュ化を行い、元のパスワードを直接保存しないようにしましょう。PHPの password_hash() と password_verify() 関数を使えば、簡単に安全なパスワードの管理を実現できます。コストの設定にも気を配り、適切なセキュリティレベルを維持することが重要です。