Was ist die "geheime" Option der Sitzung?

111

Ich weiß nichts über Kryptographie. Ich frage mich, was das Sitzungsgeheimnis ist.

Ich sehe folgenden Code:

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

Was ist das Geheimnis und soll ich es ändern?

Harry
quelle

Antworten:

83

Ja, du solltest es ändern. Ein Sitzungsgeheimnis in connect wird einfach verwendet, um den Hash zu berechnen . Ohne die Zeichenfolge würde der Zugriff auf die Sitzung im Wesentlichen "verweigert". Schauen Sie sich die Connect-Dokumente an , die ein wenig helfen sollten.

Hacknightly
quelle
43
Sie können es nicht nur ändern, sondern sollten es auch ändern.
Michael Mior
1
@ MichaelMior, wie oft?
FRD
9
@FRD Mein Punkt war, dass Sie die Standardeinstellung von so etwas nicht beibehalten sollten topsecret. Das Geheimnis sollte eine zufällige Zeichenfolge sein. Idealerweise würden Sie es auch regelmäßig ändern, falls es entdeckt wurde. Dies erfordert jedoch Unterstützung für die geheime Rotation, damit Sie vorhandene Sitzungen nicht sofort ungültig machen. Das heißt, zwei Sitzungsgeheimnisse sollten gleichzeitig als gültig betrachtet werden. Meines Wissens unterstützt Express derzeit keine rotierenden Geheimnisse.
Michael Mior
7
@ MichaelMior Express-Session seit 1.11.0 unterstützt geheime Rotation. Aus den Dokumenten: "Wenn ein Array von Geheimnissen bereitgestellt wird, wird nur das erste Element zum Signieren des Sitzungs-ID-Cookies verwendet, während alle Elemente bei der Überprüfung der Signatur in Anforderungen berücksichtigt werden." (Siehe Expressjs / Session # 127 für Details.)
Wolfgang
Ist das gleiche wie ein signierter Cookie, wenn ja ... müssen Sie dies tun:res.cookie('name', 'value', {signed: true})
Muhammad Umer
22

Das Geheimnis wird verwendet, um die Sitzung mit HMAC zu hashen:

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

Die Sitzung wird dann vor Sitzungsentführungen geschützt, indem der Fingerabdruck mit dem Geheimnis gegen den Hash überprüft wird:

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

Teilstapel
quelle
3
Wie schützt der Hash jedoch vor Sitzungsentführungen? Wenn der Angreifer das Sitzungscookie hat, hat er dann nicht auch den Hash? Wenn der Angreifer das Cookie nicht hat, wie macht es dann der geheime Hash schwieriger zu erraten (im Gegensatz zu einer längeren zufälligen Sitzungs-ID)?
Stuart P. Bentley
8
Das Geheimnis ist ein Salz für den Hash. Dies macht es für jemanden nur schwieriger: 1. einen Phishing-Cookie zu entschlüsseln, 2. eine Sitzung zu fälschen, indem er sich als Benutzer ausgibt, da er nicht das Geheimnis (Salz) hat, das er nicht kann Erstellen Sie eine korrekte Sitzungs-ID.
Mattdlockyer
7
Beide Links sind ungültig, da es sich um eine 3 Jahre alte Antwort handelt.
Tryse
5
@mattdlockyer Dies schützt Sie nicht vor Sitzungsentführungen. Und warum sollte ein Angreifer versuchen, ein Cookie zu entschlüsseln? Wenn der Angreifer das Cookie hat, hat er bereits vollen Zugriff, bis die Sitzung endet. Ich meine, es ist nicht so, dass Leute das Passwort ihres Benutzers im Cookie speichern, das wäre lächerlich. Und Dinge wie jwt sollten fast immer vermieden werden.
Forivin
Es scheint gemischte Antworten bezüglich des Zwecks des Geheimnisses einer Sitzung zu geben. Einige sagen, es schützt vor Sitzungsentführungen, während andere anderer Meinung sind. Kann jemand erklären, was der eigentliche Zweck der Generierung dieses Hash ist? Wofür berechnet es genau einen Hash?
NawK
-9

Geheimschlüssel, der hauptsächlich zum Verschlüsseln von Daten in einer Sitzung verwendet wird

Rahul Saini
quelle
8
Nein, ist es nicht. Siehe die akzeptierte Antwort von vor 6 Jahren.
Quentin