この質問は言語固有ではありません。 ユーザー名とパスワードをウェブサイトのログインフォームからサーバーに適切に送信する方法に興味があります。
私の推測では、パスワードをハッシュし、ユーザー名/パスワードをPOST本文に入れて、HTTPS
に送信します。より良い方法は何ですか?
適切な方法として、理想的ではない方法について説明します。
http://www.somesite.com/login?un=myplaintextusername&pw=myplaintextpassword
重要な部分は、フォームデータをPOST本文で送信し(そのため、どこにもキャッシュされず、通常はログファイルに保存されません)、HTTPSを使用することです(適切な場合) SSL/TLS証明書。ネットワークトラフィックを監視してパスワードを盗聴することはできません。その場合、パスワードをハッシュしても、少なくとも転送中は大きなメリットはありません。
では、なぜパスワードのハッシュ化について話題になるのでしょうか。通常、ユーザーのパスワードをプレーンテキスト形式でサーバー側のデータベースに保存することは望ましくありません(そうしないと、侵害されたサーバーの影響が他の場合よりもさらに悪化します)。代わりに、通常はソルト/ハッシュフォームを保存し、フォームデータを介して受け取ったパスワードに同じソルト/ハッシュを適用して、2つを比較できるようにします。
ソルティングの詳細については、 http://en.wikipedia.org/wiki/Salt_(cryptography) (およびそのリンク)を参照してください。
HTTPSを使用している場合、名前とパスワードをPOST本文で送信できます。これは盗聴者から保護されます(SSLを信頼している場合)。パスワードをハッシュする必要はありません。 、その場合、パスワードハッシュはパスワード自体と同じくらい便利なので、何も購入しません。
より重要な質問は、サーバー側でパスワードをどのように保存するかです。 scrypt のような適切なアルゴリズムを使用する場合にのみ、ハッシュされたパスワードを保存できます。しかし、それは [〜#〜] srp [〜#〜] などの高度なプロトコルほど優れていません。
常にHTTPSを使用し、自作のコードは使用しないでください。 SSLはハッシュと暗号化を処理します。これが唯一の安全な方法です。
また、サーバーエンドでパスワードをハッシュし、元のパスワードではなくハッシュを保存していることを確認してください。次に、ハッシュを比較してログインを確認します。これにより、攻撃者が侵害された場合にデータベースから直接プレーンテキストのパスワードを読み取ることを防ぎます。