Quelle est l'option «secrète» de la session?

111

Je ne sais rien de la cryptographie. Je me demande quel est le secret de la session.

Je vois du code comme celui-ci:

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

Quel est le secret et dois-je le changer?

Harry
la source

Réponses:

83

Oui, vous devriez le changer. Un secret de session dans connect est simplement utilisé pour calculer le hachage . Sans la chaîne, l'accès à la session serait essentiellement «refusé». Jetez un œil aux documents de connexion , cela devrait vous aider un peu.

Hacknightly
la source
43
Non seulement vous pouvez le changer, mais vous devez le changer.
Michael Mior
1
@MichaelMior, à quelle fréquence?
FRD
9
@FRD Mon point était que vous ne devriez pas garder la valeur par défaut de quelque chose comme topsecret. Le secret doit être une chaîne aléatoire de caractères. Idéalement, vous devriez également le changer périodiquement au cas où il aurait été découvert. Cependant, cela nécessite la prise en charge de la rotation secrète afin de ne pas invalider immédiatement les sessions existantes. Autrement dit, deux secrets de session doivent être considérés comme valides simultanément. À ma connaissance, Express ne prend pas en charge la rotation des secrets pour le moment.
Michael Mior
7
@MichaelMior express-session depuis la 1.11.0 prend en charge la rotation secrète. Extrait de la documentation: "Si un tableau de secrets est fourni, seul le premier élément sera utilisé pour signer le cookie d'identifiant de session, tandis que tous les éléments seront pris en compte lors de la vérification de la signature dans les demandes." (Voir expressjs / session # 127 pour plus de détails.)
Wolfgang
Est-ce la même chose que le cookie signé, si oui .. avez-vous besoin de le faire:res.cookie('name', 'value', {signed: true})
Muhammad Umer
22

Le secret est utilisé pour hacher la session avec HMAC:

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

La session est ensuite protégée contre le détournement de session en vérifiant l'empreinte digitale par rapport au hachage avec le secret:

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

sous-pack
la source
3
Mais comment le hachage protège-t-il contre le détournement de session? Si l'attaquant a le cookie de session, alors n'a-t-il pas également le hachage? Si l'attaquant n'a pas le cookie, alors comment le hachage secret rend-il plus difficile à deviner (par rapport à un ID de session aléatoire plus long)?
Stuart P. Bentley
8
le secret est un sel pour le hachage, cela rend simplement plus difficile pour quelqu'un de: 1. décrypter un cookie hameçonné, 2. usurper une session en se faisant passer pour un utilisateur, car ils n'ont pas le secret (sel) qu'ils ne peuvent pas produire un identifiant de session approprié.
mattdlockyer
7
Ces deux liens sont invalides car il s'agit d'une réponse datant de 3 ans.
trysis
5
@mattdlockyer Cela ne vous protège pas contre le détournement de session. Et pourquoi un attaquant essaierait-il de déchiffrer un cookie? Si l'attaquant possède le cookie, il a déjà un accès complet jusqu'à la fin de la session. Je veux dire que ce n'est pas comme si les gens stockaient le mot de passe de leur utilisateur dans le cookie, ce serait ridicule. Et des choses comme jwt devraient presque toujours être évitées.
Forivin le
Il semble y avoir des réponses mitigées concernant le but du secret d'une session. Certains disent qu'il protège contre le détournement de session tandis que d'autres ne sont pas d'accord. Quelqu'un peut-il expliquer quel est le véritable but de la génération de ce hachage? Justement, à quoi sert-il le calcul d'un hachage?
nawK
-9

clé secrète essentiellement utilisée pour crypter les données en session

Rahul Saini
la source
8
Non, ça ne l'est pas. Voir la réponse acceptée d'il y a 6 ans.
Quentin