Qual è l'opzione "segreta" della sessione?


111

Non so niente di crittografia. Mi chiedo quale sia il segreto della sessione.

Vedo codice come questo:

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

Qual è il segreto e dovrei cambiarlo?

Risposte:


83

Sì, dovresti cambiarlo. Un segreto di sessione in connect viene semplicemente utilizzato per calcolare l'hash . Senza la stringa, l'accesso alla sessione verrebbe essenzialmente "negato". Dai un'occhiata ai documenti di connessione , che dovrebbero aiutare un po '.


43
Non solo puoi cambiarlo, ma dovresti cambiarlo.
Michael Mior

1
@MichaelMior, quanto spesso?
FRD

9
@FRD Il mio punto era che non dovresti mantenere l'impostazione predefinita di qualcosa come topsecret. Il segreto dovrebbe essere una stringa casuale di caratteri. Idealmente dovresti anche cambiarlo periodicamente nel caso in cui sia stato scoperto. Tuttavia, ciò richiede il supporto per la rotazione segreta in modo da non invalidare immediatamente le sessioni esistenti. Cioè, due segreti di sessione dovrebbero essere considerati validi contemporaneamente. Per quanto ne so, Express non supporta la rotazione dei segreti in questo momento.
Michael Mior

7
@MichaelMior express-session dalla 1.11.0 supporta la rotazione segreta. Dai documenti: "Se viene fornito un array di segreti, solo il primo elemento verrà utilizzato per firmare il cookie ID di sessione, mentre tutti gli elementi verranno considerati durante la verifica della firma nelle richieste." (Vedi expressjs / session # 127 per i dettagli.)
Wolfgang

È la stessa cosa del cookie firmato, se sì .. devi farlo:res.cookie('name', 'value', {signed: true})
Muhammad Umer

22

Il segreto viene utilizzato per eseguire l'hashing della sessione con HMAC:

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

La sessione viene quindi protetta contro il dirottamento della sessione controllando l'impronta digitale contro l'hash con il segreto:

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


3
In che modo l'hash protegge dal dirottamento della sessione, però? Se l'attaccante ha il cookie di sessione, non ha anche l'hash? Se l'attaccante non ha il cookie, in che modo l'hash segreto rende più difficile indovinare (rispetto al solo avere un ID di sessione casuale più lungo)?
Stuart P. Bentley

8
il segreto è un sale per l'hash, questo rende solo più difficile per qualcuno: 1. decifrare un cookie phishing, 2. falsificare una sessione impersonando un utente, poiché non hanno il segreto (sale) che non possono produrre un id di sessione appropriato.
mattdlockyer

7
Entrambi questi link non sono validi perché si tratta di una risposta vecchia di 3 anni.
trysis

5
@mattdlockyer Questo non ti protegge dal dirottamento della sessione. E perché un utente malintenzionato dovrebbe tentare di decrittografare un cookie? Se l'aggressore ha il cookie, ha già pieno accesso fino al termine della sessione. Voglio dire, non è che le persone memorizzino la password dei propri utenti nel cookie, sarebbe ridicolo. E cose come jwt dovrebbero quasi sempre essere evitate.
Forivin

Sembra che ci siano risposte contrastanti riguardo allo scopo del segreto di una sessione. Alcuni dicono che protegge dal dirottamento della sessione mentre altri non sono d'accordo. Qualcuno può spiegare qual è il vero scopo di generare questo hash? Precisamente, per cosa sta calcolando un hash?
nawK

-9

chiave segreta utilizzata fondamentalmente per crittografare i dati nella sessione


8
No, non lo è. Vedi la risposta accettata di 6 anni fa.
Quentin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.