ホームページ  >  記事  >  バックエンド開発  >  PHP を使用した安全な方法でパスワード ハッシュを保存および管理する

PHP を使用した安全な方法でパスワード ハッシュを保存および管理する

WBOY
WBOYオリジナル
2023-07-06 14:00:141341ブラウズ

PHP を使用してパスワード ハッシュを安全な方法で保存および管理する

最新の Web アプリケーションでは、ユーザー パスワードのセキュリティが非常に重要です。ユーザーのパスワードを保護するには、パスワード ハッシュを安全に保存および管理する方法が必要です。 PHP では、いくつかの強力なパスワード ハッシュ アルゴリズムと関連関数を使用してこれを実現できます。

一般に、データベースが漏洩すると、ユーザーのパスワードが完全に公開されてしまうため、ユーザーのパスワードを平文で保存すべきではありません。代わりに、パスワード ハッシュ関数を使用して、ユーザーのパスワードを不可逆的なハッシュ値に変換し、データベースに保存できます。ユーザーがログインすると、同じハッシュ関数を使用してユーザーが送信したパスワードを再度ハッシュし、データベースに保存されているハッシュ値と比較できます。

以下は、PHP でパスワード ハッシュ関数を使用したサンプル コードです。

<?php

// 用户注册时将密码哈希化存储
function register($username, $password) {
    // 生成随机盐值
    $salt = bin2hex(random_bytes(16));

    // 哈希密码
    $hashedPassword = password_hash($password . $salt, PASSWORD_DEFAULT);

    // 存储用户名、哈希密码和盐值到数据库
    // ...
}

// 用户登录时验证密码
function login($username, $password) {
    // 从数据库中获取用户的哈希密码和盐值
    // ...

    // 计算哈希值
    $hashedPassword = password_hash($password . $salt, PASSWORD_DEFAULT);

    // 比对哈希值
    if (password_verify($hashedPassword, $storedHashedPassword)) {
        // 密码匹配,登录成功
        // ...
    } else {
        // 密码不匹配,登录失败
        // ...
    }
}

?>

上記のサンプル コードでは、ユーザーが登録すると、最初にランダムなソルト値が生成されます (PHP を使用できます)。 random_bytes() 関数が生成)、password_hash() 関数を使用してパスワードとソルトが連結され、ハッシュ化されます。最後に、ユーザー名、ハッシュされたパスワード、ソルトをデータベースに保存します。

ユーザーがログインすると、まずユーザーのハッシュ化されたパスワードとソルト値をデータベースから取得します。次に、ユーザーが送信したパスワードがソルト値と連結され、password_hash() 関数を使用してハッシュ計算が再度実行されます。最後に、password_verify() 関数を使用して、ユーザーが送信したハッシュ化されたパスワードとデータベースに保存されているハッシュ化されたパスワードを比較します。一致が成功した場合、パスワードは正しいため、ユーザーは正常にログインします。一致しなかった場合、ログインは失敗します。

この方法の利点は、たとえデータベースが攻撃者によって取得されたとしても、ハッシュ アルゴリズムは不可逆であるため、攻撃者はユーザーの平文パスワードを直接取得できないことです。同時に、各ユーザーは固有のソルト値を持っているため、2 人のユーザーが同じパスワードを使用した場合でも、ハッシュ値は完全に異なるため、パスワードの解読の難易度が高まります。

もちろん、パスワードのセキュリティを保護するために、複雑なパスワード ポリシー (長さ、大文字、数字、特殊文字を含める要件など) を使用するなど、追加の対策を講じることもできます。塩漬けの強さの選択、定期的な塩分値の変更など。さらに、攻撃者によって悪用される可能性のあるハッシュ アルゴリズムの既知の脆弱性を防ぐために、アプリケーションで使用されるパスワード ハッシュ アルゴリズムを定期的に更新することも推奨されます。

つまり、PHP で提供されるパスワード ハッシュ関数を最大限に活用すると、ユーザーのパスワードを安全に保存および管理できるため、ユーザーの個人情報とアカウントのセキュリティを保護できます。 SQL インジェクションの防止、SSL 暗号化を使用した機密情報の送信など、他のセキュリティ対策にも注意を払う必要があることも同様に重要です。これらのセキュリティ対策を総合的に適用することで初めて、安全で信頼性の高いネットワークアプリケーションを構築することができます。

以上がPHP を使用した安全な方法でパスワード ハッシュを保存および管理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。