1

パスポート ローカル戦略を使用する際のベスト プラクティスに関する情報を探しています。ログインの永続性のために、github にある authToken を使用するローカル戦略の例を調べました。同僚と話をしたとき、彼らは、このトークンをセッション cookie に保存することは、パスワードを保存するよりも安全であるという疑問を投げかけました。では、この質問にどのように答えればよいでしょうか。緑の質問ですが、私はライフサイクル全体を完全には理解していません。では、例のように bccrypt および mongo と統合した場合、これはどのように安全なソリューションになるのでしょうか。また、これが単なる例であり、必ずしも堅牢なソリューションを示すことを意図していない場合、ユーザーとアプリケーションを安全に保つためのベスト プラクティスは何ですか?

https://github.com/jaredhanson/passport-local/tree/master/examples/express3-mongoose-rememberme

4

1 に答える 1

2

あなたの同僚は間違っていません.実装はあまり安全ではありません.

ユーザー名/パスワードはユーザーが削除するまで使用できますが、30 日以内にのみ使用できるという点でのみ、より安全です。(パスワードを変更せずに sessionId を削除できるので、さらに便利です)。

ただし、Remember Me を実装する安全な方法ではありません。rememberMe を実装する適切な方法については、フォームベースの Web サイト認証の決定版ガイドを参照してください。

基本的に、次のように github コードを変更する必要があります。

  1. セッションの終了時にCookieを終了させます(ユーザーがブラウザを閉じたときのIE)
  2. ユーザー名/パスワードでログインするときにユーザーが私を記憶するように要求した場合、accessToken (httpOnly Cookie) を含む新しい Cookie を送信します。
  3. クライアントが sessionId Cookie ではなく accessToken Cookie を含むリクエストを送信する場合、accessToken を使用してユーザーをログインさせ、次に accessToken を新しい accessToken に変更します (クライアントの Cookie と db ユーザーの両方で)。

また、ユーザー名パスワードでログインするときは常に https を使用します (少なくとも)。

編集: 私が個人的に現在使用しているものの例を要点に入れました: https://gist.github.com/Illniyar/5432646 多分それはあなたが仲良くするのに役立つでしょう(少しごちゃごちゃしていますが)。トークンは宣伝どおりに機能しますが、私はまだパスポートを使用していませんが、パスポートに移植するのはそれほど難しくありません。ユーザーのパスワードがどのように保持されているか (ユーザーごとに異なるソルトで安全に保護されている)、およびログアウトの実行方法にも注意してください。

于 2013-04-21T22:35:20.170 に答える