PHPにパスワードを保存するための最も安全な方法は何ですか?アプリケーションの使用中にユーザーを保護することに非常に興味があり、パスワードを保存するために可能な限り最善の方法を使用したいと考えています。MD5、SHA1などのさまざまな暗号化方法について読んだことがあります。また、「ソルト」とハッシュについても読んでいます。PHPでパスワードを保存する最も安全な方法を教えてもらえますか?
2 に答える
あらゆる種類のハッシュを使用してパスワードを保存しても、システムは保護されませんが、システムが侵害された場合に、プレーンテキストのパスワードが他人に表示されるのを防ぐことができます。セキュリティは、優れた監視と優れた実践から生まれます。
マイクロソフトはこの見解を持っています:
多くのWebアプリケーションは、パスワードメカニズムを使用してユーザーを認証します。ユーザーは、ユーザー名とパスワードをHTML形式で提供します。ここで考慮すべき問題と質問は次のとおりです。
- ユーザー名とパスワードは安全でないチャネルを介してプレーンテキストで送信されますか?その場合、攻撃者はネットワーク監視ソフトウェアを盗聴して資格情報を取得する可能性があります。ここでの対策は、SSL(Secure Socket Layer)を使用して通信チャネルを保護することです。
- 資格情報はどのように保存されますか?ユーザー名とパスワードをファイルまたはデータベースのいずれかでプレーンテキストで保存している場合は、問題が発生します。アプリケーションディレクトリが不適切に構成されていて、攻撃者がファイルを参照してその内容をダウンロードしたり、新しい特権ログオンアカウントを追加したりした場合はどうなりますか?不満を持った管理者がユーザー名とパスワードのデータベースを取得した場合はどうなりますか?
- 資格情報はどのように検証されますか?ユーザーがパスワード値を知っていることを確認することが唯一の目的である場合は、ユーザーパスワードを保存する必要はありません。代わりに、検証者をハッシュ値の形式で保存し、ログオンプロセス中にユーザーが指定した値を使用してハッシュを再計算できます。クレデンシャルストアに対する辞書攻撃の脅威を軽減するには、強力なパスワードを使用し、ランダムに生成されたソルト値をパスワードハッシュと組み合わせます。
- 最初のログオン後、認証されたユーザーはどのように識別されますか?認証Cookieなどの何らかの形式の認証チケットが必要です。クッキーはどのように保護されていますか?安全でないチャネルを介して送信された場合、攻撃者はCookieをキャプチャし、それを使用してアプリケーションにアクセスする可能性があります。盗まれた認証Cookieは、盗まれたログオンです。
パスワードをデータベースに保存する前に、パスワードをShaしてソルトします。いかなる場合でも、パスワードをプレーンテキストで保存することはできません。ハッシュ化されたら、プレーンパスワードを破棄します。
また、セッション変数を使用して、ユーザーセッションを保存および追跡します。Cookieはブラウザに保存されており、侵害される可能性があるため、Cookieを使用しないでください。
適切なパスワードポリシーを設定します。少なくとも、すべてのパスワードに最小の長さがあり、辞書の単語ではなく、すべて数値ではなく、大文字と小文字が混在し、中央に数字が混在していることを確認してください。などGoogleオブジェクトのパスワードポリシーがたくさん出てきます。