私は学習の目的でユーザーログインシステムを作りたいと思っています。私はいくつかの質問があります。ユーザーログインシステムを実装する正しい方法
私はいくつかの調査を行い、ユーザーのログインシステムを実装する適切な方法は、ユーザー名/ IDと暗号化された/ハッシュされたバージョンのパスワードをデータベースに記憶することです。ユーザーのログイン時に、クライアント側のコードはMD5またはSHA-1などのパスワードを暗号化し、この暗号化されたパスワードをサーバー側に送信し、データベース内のパスワードと比較します。一致した場合、ユーザーは正常にログインします。
この実装方法により、データベース管理者またはプログラマーがデータベースのパスワードの実際のテキストを見るのを防ぐことができます。また、インターネット上の転送中にハッカーが本物のパスワードを傍受するのを防ぐことができます。しかし、私は理解していないことがあります。
私の最初の質問は、ハッカーがまたはのDBA(データベースハッキングによる)パスワードのハッシュ/暗号化されたバージョンを知っていれば、プログラマは単にデータベース内のテキストを見て、パスワードのハッシュバージョンを取得するもの、ということです、彼らは簡単にサーバー側にこのハッシュバージョンのパスワードを送信し、次に比較を行い、正常にログインするプログラムを作ることができます。パスワードを暗号化することはそれほど役に立ちません。私はここで何か誤解していると思う。
2番目の質問は、これは(私が上記の方法で)現在の業界でユーザーログイン機能を実装するための最も一般的で適切な方法ですか?私はすべてを手動で行う必要がありますか、あるいはデータベースによっては同じことをするための組み込み能力がありますか?ウェブサイトやウェブアプリのユーザーログインを行う最も一般的な方法/方法はありますか?もしそうなら、私にいくつかの詳細を教えてください。
以前の私の会社では、couchDBを使用してパスワードなどのユーザーのログイン情報を保存していました。彼らは暗号化のことについてあまり気にしなかった。彼らは、couchDBが自動的にパスワードを暗号化し、それを文書に格納すると言いました。これが安全な方法であるかどうかはわかりません。そうであれば、多くの作業を節約できるため、プログラマーにとっては非常に便利です。
この方法(ポイント3)は通常の使用に十分安全ですか? mySQLのような他のデータベースシステムにも同じことができるこのような能力がありますか?もしそうなら、それは、mySQL組み込みメソッドを使用すると十分に安全であることを意味しますか?
私はユーザーのログイン機能を実装する非常に安全な方法を探していません。私はむしろ、人気があり、実装が簡単で、適切で、大部分のWebアプリケーションに十分なセキュリティが確保されている方法を探しています。助けてください。提供された詳細は本当に感謝します。
システムがパブリック塩でパスワードクライアント側をハッシュし、プライベートソルト(つまり、サーバーに格納された文字列、またはサーバー側でランダムに生成された塩)でパスワードサーバー側を再ハッシュするとどうなりますか)?この方法では、サーバーは実際のプレーンテキストのパスワードを知ることができません。ハッカーがフェッチするときはいつでも、プレーンテキストバージョンのパスワードはサーバーに送信されません。私は知っている、中間の男はまだパスワードのハッシュをフェッチすることができますし、ブルートを強制的にJavaの塩でそれを強制しようとするが、それでも、彼の人生はかなり困難になるでしょうか? –
クライアントがハッシュされたパスワードをサーバーに送信する場合、*ハッシュされたパスワード*は事実上実際のパスワードです。ハッカーがハッシュされたパスワードを傍受した場合、ハッシュされていないパスワードを知らずにサーバーに送信することができ、サーバーはそれを受け入れます。 –
はい、これはサーバーに送信されているプレーンテキストのパスワードにも当てはまります。ハッカーが傍受した場合、ハッカーは簡単で単純にアカウントにログインすることができます。しかしプレーンテキストのパスワードがハッシュされている場合、ハッカーがそれを傍受した場合、彼はその特定のウェブサイトにしかログインできず、クライアントが同じパスワードを持つ可能性のある他のウェブサイトにはログインできません。 –