セッションの「秘密」のオプションは何ですか?


111

暗号については何も知りません。セッションの秘密とは何なのでしょうか。

私はこのようなコードを見ます:

app.use(express.session({
  store: mongoStore({
    url: app.set('db-uri')
  }),
  secret: 'topsecret'
}));

秘密は何ですか、それを変更する必要がありますか?

回答:


83

はい、変更する必要があります。接続のセッションシークレットは、ハッシュの計算に使用されます。文字列がないと、セッションへのアクセスは基本的に「拒否」されます。connect docsを見てください。これは少し役立つはずです。


43
変更できるだけでなく、変更する必要があります。
Michael Mior

1
@MichaelMior、どれくらいの頻度?
FRD 2014

9
@FRD私の要点は、のようなデフォルトを維持してはいけないということでしたtopsecret。シークレットはランダムな文字列である必要があります。理想的には、発見された場合に備えて定期的に変更することもできます。ただし、これにはシークレットローテーションのサポートが必要なので、既存のセッションをすぐに無効にしないでください。つまり、2つのセッションシークレットは同時に有効であると見なされます。私の知る限り、現時点では、Expressはシークレットのローテーションをサポートしていません。
Michael Mior

7
1.11.0以降の@MichaelMiorエクスプレスセッションは、シークレットローテーションをサポートしています。ドキュメントから:「シークレットの配列が提供されている場合、最初の要素のみがセッションID Cookieの署名に使用されますが、リクエストの署名を検証するときはすべての要素が考慮されます。」(詳細については、expressjs / session#127を参照してください。)
Wolfgang

はい..あなたがこれを行う必要がない場合は、署名したクッキーのように、これと同じものです:res.cookie('name', 'value', {signed: true})
ムハンマドUmer

22

シークレットは、HMACでセッションをハッシュするために使用されます。

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L256

次に、フィンガープリントをシークレット付きのハッシュと照合して、セッションの乗っ取りからセッションを保護します。

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L281-L287


3
しかし、ハッシュはどのようにしてセッションハイジャックから保護しますか?攻撃者がセッションCookieを持っている場合、ハッシュも持っていませんか?攻撃者 Cookieを持っていない場合、シークレットハッシュによって(ランダムセッションIDが長いだけでなく)推測がどのように難しくなりますか?
スチュアートP.ベントレー

8
シークレットはハッシュのソルトです。これにより、誰かが次のことが困難になります。1。フィッシングされたCookieを復号化します。2。ユーザーになりすましてセッションを偽装します。これは、シークレット(塩)がないためです適切なセッションIDを生成します。
mattdlockyer 2013年

7
これは3年前の回答であるため、これらのリンクはどちらも無効です。
トリシス

5
@mattdlockyerこれは、セッションの乗っ取りから保護しません。そして、なぜ攻撃者はCookieを解読しようとするのですか?攻撃者がCookieを持っている場合、攻撃者はセッションが終了するまですでに完全なアクセス権を持っています。つまり、ユーザーのパスワードをCookieに保存するようなものではありません。そして、jwtのようなことはほとんど常に避けられるべきです。
Forivin '19

セッションの秘密の目的に関しては、さまざまな答えがあるようです。他の人が同意しない間、それはセッションハイジャックから保護すると言います。誰かがこのハッシュを生成する本当の目的は何か説明できますか?正確には、ハッシュを計算しているのは何ですか?
nawK

-9

セッションでデータを暗号化するために基本的に使用される秘密鍵


8
いいえ、そうではありません。6年前から受け入れられた答えを見てください。
クエンティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.