2016-09-17 8 views
0

mysqlにユーザ名とパスワードを保存するハンドラを作成しました。私がやるとしたら、抽象レベルではbcryptを使用してmysqlにパスワードをハッシュして保存した後のユーザのログインに関するベストプラクティス

bcrypt.compare(myPlaintextPassword, hash, function(err, res) { 
    // res == true 
}); 

bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) { 
    // Store hash in your password DB. 
}); 

bcryptのもそうのようなハッシュで平文を比較するために、標準的なコードを提供しています。ハンドラ関数は、標準のbcryptのパスワードハッシュを行い、

  • ユーザー入力のユーザー名とプレーンテキストのパスワード
  • をqを送る取得:私は次の操作を実行する必要があります比較関数上記=「somenameの」
  • ユーザ名が
  • がハッシュされたパスワードを比較して、ユーザー認証バックいくつかのユーザ名を取得し、パスワードをハッシュ化されたWHEREデータベースへueryでは、ユーザーがSELECT * FROM

それに伴う問題は、すべてのユーザー固有のデータをすることができないということです認証の前に取得されるので、余分なユーザーの機密データを取得するために追加のクエリをチェーンする必要があり、このプロセスはjankyと思われます。パスワードを取り戻す必要がないはずのときにクライアントがハッシュされたパスワードを持っているため、安全ではないようです。

私はしたいと思います:

  • いくつかのユーザ名と任意のユーザー固有のデータ
  • を取り戻すデータベースに

    SELECT * FROM users 
    WHERE username = 'SomeName' 
    AND password = COMPARISON_FUNCTION_THAT_WORKS_WITH_BCRYPT('plaintext') 
    
  • をユーザ入力のユーザー名とプレーンテキストのパスワード
  • 送信クエリを取得私は完了しました

パスワードの暗号化/ユーザーログインプロセスでこのソフトウェアを360kダウンローダーとしているので、私はここでボートを完全に紛失していますか?

+2

'この時点でクライアントはハッシュされたパスワードを持っているため、この時点でクライアントがハッシュパスワードを持っている理由を理解できません。コードを再考してください –

+0

それでは、なぜbcryptは一見有益なパスワードハッシュツールを提供していますか? – J0NNYZER0

+0

あなたの質問にはコードが不足しているので、私は混乱しなければなりません。node.jsタグを見るので、node.jsをサーバ側に集めてmysqlに接続し、bcryptがハッシングしている場所ですパスワードは - 私はこれまでのところですか?だから "クライアント"は何ですか?それはウェブブラウザですか?あなたはクライアント側でbcryptを使用していますか? –

答えて

0

あなたが質問、問題が何であるかには非常に明確ではありません。

私はしたいと思います:

  • ユーザー入力のユーザー名とプレーンテキストのパスワード
  • は、データベース
  • にクエリを送信しなさい
  • ユーザー名とユーザー固有のデータを戻す
  • と完了しました

これはまさにあなたが今できることです。

  • 保存されたハッシュ
  • に対する(ハッシュされたパスワードを含む)は、ユーザーの情報
  • チェック、ユーザー入力したパスワードのクエリとあなたが

行われていることの問題点は、すべてのユーザーということです認証前に特定のデータを取得することはできません。そのため、余分なユーザーの機密データを取得するために追加のクエリをチェーンする必要があり、このプロセスがjankyと思われます。

不要にする場合は、2番目のクエリは必要ありません。むしろより:ユーザーから

SELECT PasswordHash WHEREユーザーからユーザー名=%のユーザー名%

使用

SELECT * WHEREユーザー名=%のユーザー名%

今すべてのユーザー固有のデータが1つの質問で返されます。

関連する問題